C#generics:你能转换<t> ToString吗?</t>

时间:2013-09-23 22:06:52

标签: c# variables generics types field

在这里快点〜 我想转换&lt; T> ToString所以我可以用该类型替换变量〜

public void ChangePanel<T>(T Action){

    FieldInfo Field = T.GetField(T.toString);
    Field.SetValue(SomeObject, Action);
}

如果有更好的方法,请告诉我!!

编辑:仅供参考 SomeObject 中的变量与类型

相同

4 个答案:

答案 0 :(得分:8)

您可以使用typeof Keyword获取Type个实例,使用Type.Name Property获取该类型的名称。

public void ChangePanel<T>(T action)
{
    Type typeOfObject = someObject.GetType();
    Type typeOfAction = typeof(T);

    FieldInfo field = typeOfObject.GetField(typeOfAction.Name);
    field.SetValue(someObject, action);
}

答案 1 :(得分:7)

是。 ToString()类定义了object,所有内容都来自于此,我希望您可以在任何类型T上调用它。但是,您需要在参数本身而不是类型上调用它,因此您应该T.ToString()执行Action.ToString()。如果要获取该类型的名称,则应使用反射而不是ToString

此外,反射选项是;

 typeof(T).Name

 Action.GetType().Name

答案 2 :(得分:1)

如果您想获得通用类型的名称,那么您只需拨打typeof(T).Name

public static string GetGenericTypeName<T>()
{
    return typeof(T).Name;
}

答案 3 :(得分:0)

ToString方法是一种方法,所以你需要括号来调用它,这种情况对于标识符很重要:

FieldInfo Field = (typeof T).GetField(Action.ToString());

GetFieldType类的一种方法,因此您需要typeof来获取Type泛型类型的T对象。