I am working on code generation and ran into a snag with generics. Here is a ‘simplified’ version of what is causing me issues.
Dictionary<string, DateTime> dictionary = new Dictionary<string, DateTime>(); string text = dictionary.GetType().FullName;
With the above code snippet the value of text is as follows:
System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
(Line breaks added for better readability.)
Is there a way to get the type name (type) in a different format without parsing the above string? I desire the following result for text:
System.Collections.Generic.Dictionary<System.String, System.DateTime>
There is no built-in way to get this representation in the .Net Framework. Namely because there is no way to get it correct. There are a good number of constructs that are not representable in C# style syntax. For instance ‘<>foo’ is a valid type name in IL but cannot be represented in C#.
However, if you’re looking for a pretty good solution it can be hand implemented fairly quickly. The below solution will work for most situations. It will not handle
Example: