6

快来这里~我想把<T>转成ToString,这样我就可以把变量换成那个类型了~

public void ChangePanel<T>(T Action){

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

另外请让我知道是否有更好的方法来做到这一点!

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

4

4 回答 4

12

您可以使用typeofKeyword来获取Type实例,并使用Type.Name 属性来获取类型的名称。

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

    FieldInfo field = typeOfObject.GetField(typeOfAction.Name);
    field.SetValue(someObject, action);
}
于 2013-09-23T22:13:15.300 回答
8

是的。ToString()是在一切派生自的类上定义的object,所以我希望您可以在任何类型上调用它T。但是,您需要在参数本身而不是类型上调用它,因此T.ToString()您应该做而不是做Action.ToString(). 如果要获取类型的名称,则应使用反射而不是ToString.

此外,反射选项是;

 typeof(T).Name

或者

 Action.GetType().Name
于 2013-09-23T22:11:16.773 回答
3

如果您想获取泛型类型的名称,那么您可以简单地调用typeof(T).Name

public static string GetGenericTypeName<T>()
{
    return typeof(T).Name;
}
于 2013-09-23T22:12:46.850 回答
0

方法是一个方法,ToString所以你需要括号来调用它,并且大小写对于标识符很重要:

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

GetField是类的一个方法,Type所以需要typeof获取泛型类型的Type对象。T

于 2013-09-23T22:12:46.177 回答