You're right...there's no difference in the implementation for the names of
Generic types. The weirdness in the type name that I was seeing comes from
using the fancy new 'yield return' syntax that was introduced in C# 2.0.

To illustrate, try this block of code in Mono and on .NET:

--------------------------
using System;
using System.Collections.Generic;
using System.Collections;

namespace MonoBug
{
        public class ListBug
        {
                public static IEnumerable<T> EnumerableFromArray<T>(T[]
array)
                {
                        foreach (T t in array)
                                yield return t;
                }

                public static IEnumerable<int> IntEnumerableFromArray(int[]
array)
                {
                        foreach (int i in array)
                                yield return i;
                }

                public static void Main()
                {
                        Console.WriteLine(EnumerableFromArray(new int[] { 1,
2, 3 }).GetType());
                        Console.WriteLine(IntEnumerableFromArray(new int[] {
1, 2, 3 }).GetType());
                }
        }
}
--------------------------
You'll get different results on each platform, although I'm not entirely
certain if the naming convention is part of the C# spec or not. I'm looking
into this because I'm trying to get all of the Wintellect.PowerCollections
tests to succeed in Mono (http://www.wintellect.com/PowerCollections.aspx).

If you download it right now, four of the tests will fail, and the first one
does so because the test makes assumptions about the type name.

--Dave

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Robert Jordan
Sent: Monday, March 05, 2007 11:26 PM
To: mono-devel-list@lists.ximian.com
Subject: Re: [Mono-dev] Generic type naming

David Mitchell wrote:
> My apologies if I am dredging up an issue that has already been resolved
and
> put to rest, but my curiosity compels me to do so.
> 
>  
> 
> I have noticed that Mono's algorithms for providing names to specific
> generic types is significantly different to that of Microsoft's
> implementation of .Net. Where Microsoft's implementation usually has lots
of
> fancy angle brackets and full type listings of the arguments, Mono often
has
> weird accent marks and numbers.

Like Mono, MS uses the accent marks as well. For example,
Dictionary`2[K, T] denotes the non-instantiated generic type
Dictionary<K, T> (C# notation), whereas Dictionary`2[[String, Int32]]
is an instantiated Dictionary<string, int> (C# notation).

When full names are requested, the type names become ever weirder:

System.Collections.Generic.Dictionary`2
[
        [
                System.String, mscorlib,
                Version=2.0.0.0, Culture=neutral,
                PublicKeyToken=b77a5c561934e089
        ],
        [
                System.Int32, mscorlib, Version=2.0.0.0,
                Culture=neutral, PublicKeyToken=b77a5c561934e089
        ]
]

> Is this difference between the two implementations the result of an
> architectural decision, developer laziness (hey, the best developers are
all
> a bit lazy, right?), or of something in between the two extremes?

There should be no differences. Please file bugs if you find some.

Robert

_______________________________________________
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

_______________________________________________
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Reply via email to