Pornim de la urmatorul exemplu:
". Pentru acest lucru avem nevoie sa apelam metoda GetGenericArguments pentru a obtine tipuriile generice.
Mai jos gasiti un extension method la Type care returneaza numele la type asa cum l-am prezentat mai sus.
List<string> list = new List<string>();
Console.WriteLine(list.GetType().Name);
Asa cum ne-am astepta ne este returnat "List`1". Dar uneori nu ne este de ajuns atata, vrem sa vedem si tipul generci. Ceva de genul acesta "ListMai jos gasiti un extension method la Type care returneaza numele la type asa cum l-am prezentat mai sus.
public static class TypeExtensions
{
private const string TypeSeparator=",";
private const char UnusedSymbol = '`';
private const string TypeFormat = "{0}<{1}>";
public static string ToGenericTypeString(this Type type)
{
if (!type.IsGenericType)
{
return type.Name;
}
return string.Format(TypeFormat,
GetGenericTypeName(type),
GetGenericArgumentsName(type));
}
private static string GetGenericArgumentsName(Type type)
{
return string.Join(
TypeSeparator,
type.GetGenericArguments()
.Select(ToGenericTypeString).ToArray());
}
private static string GetGenericTypeName(Type type)
{
string typeName =type.GetGenericTypeDefinition().Name;
return typeName.Substring(0, typeName.IndexOf(UnusedSymbol));
}
}
Enjoy!
Comments
Post a Comment