I'm writing a simple code generation application to build POCO's from a DB2 database schema. I know it doesn't matter, but I prefer to use type aliases rather than the actual system type name if they are available, i.e., "int" rather than "Int32." Is there a way using reflection that I can get a type's alias rather than it's the actual type?
//Get the type name
var typeName = column.DataType.Name;
//If column.DataType is, say, Int64, I would like the resulting property generated
//in the POCO to be...
public long LongColumn { get; set; }
//rather than what I get now using the System.Reflection.MemberInfo.Name property:
public Int64 LongColumn { get; set; }
Thanks in advance.
I don't think there is. The alias is completly a compile time concept specific to the paticular .NET language you use. Once you reflect and view the type you will see the true .NET type of the object.
Based on the above 2 answers for using a Dictionary, I've written 2 basic extension methods that might help clean up the use a bit. Including this class in your project you will be able to use it simply by calling the Alias() or AliasOrName() methods on the type as shown below.
Example usage;
The implementation;
Nope - just create a
Dictionary<Type,string>
to map all of the types to their aliases. It's a fixed set, so it's not hard to do:Keep it simple:
This doesn't use reflection, strictly speaking, but you can get to the type's alias by using CodeDOM:
(Having said that, I think that the other answers suggesting that you just use a mapping from CLR types to C# aliases are probably the best way to go with this one.)