我有一个这样的课程:
public class Item<T>
{
// some properties using T
}
一切正常,但是,我的MVC项目中有一些视图,我需要读取类的名称。当我有一个没有Generics的类它工作文件时,我只使用typeof(Model).Name
并使用它。问题是,当我有一个通用T
的类,.Name
类型的Type
属性时,返回如下内容:
Item`1
我想在不同的字符串中读取这两个名称而无需解决方法来删除`char 。我想这样:
对于这样的类型:
Item<Product>
我想得到这个:
string baseClass = "Item";
string genericClass = "Product";
我该怎么办?
答案 0 :(得分:0)
此函数返回表示给定类型的C#声明的字符串。
它适用于大多数事情,但可能有一个或两个边缘情况,它无法正常工作。我写了一段时间,但现在看着它,我认为它不支持nullables。
/// Returns a string that can be used as a C# type definition.
string GetTypeDefinition(Type t)
{
if (t == typeof(void)) return "void";
StringBuilder sb = new StringBuilder();
string name = t.IsGenericType ? t.FullName.Substring(0, t.FullName.IndexOf("`")) : t.FullName;
sb.Append(name);
if (t.IsGenericType)
{
sb.Append("<");
bool first = true;
foreach(Type genericType in t.GenericTypeArguments)
{
if (!first)
{
sb.Append(", ");
}
first = false;
sb.Append(GetTypeDefinition(genericType));
}
sb.Append(">");
}
if (t.IsArray)
{
sb.Append("[]");
}
return sb.ToString();
}