C#泛型:你能转换吗<;T>;ToString?
快来~ 我想将C#泛型:你能转换吗<;T>;ToString?,c#,variables,generics,types,field,C#,Variables,Generics,Types,Field,快来~ 我想将转换为字符串,以便用该类型替换变量~ public void ChangePanel<T>(T Action){ FieldInfo Field = T.GetField(T.toString); Field.SetValue(SomeObject, Action); } 公共作废更改面板(T操作){ FieldInfo Field=T.GetField(T.toString); 设置值(SomeObject,Action); } 另外,如果有更好
public void ChangePanel<T>(T Action){
FieldInfo Field = T.GetField(T.toString);
Field.SetValue(SomeObject, Action);
}
公共作废更改面板(T操作){
FieldInfo Field=T.GetField(T.toString);
设置值(SomeObject,Action);
}
另外,如果有更好的方法,请告诉我
编辑:仅供参考,SomeObject中的变量与类型同名是ToString()
是在对象
类上定义的,所有东西都是从该类派生的,因此我希望您可以在任何类型T
上调用它。但是,您需要对参数本身而不是类型调用它,因此您不应该执行T.ToString()
而是执行Action.ToString()
。如果要获取类型的名称,则应使用反射而不是ToString
此外,反射选项为:
typeof(T).Name
或
ToString
方法是一种方法,因此需要括号来调用它,大小写对于标识符很重要:
FieldInfo Field = (typeof T).GetField(Action.ToString());
GetField
是Type
类的一种方法,因此您需要typeof
来获取T
泛型类型的Type
对象。如果您想要获取泛型类型的名称,那么您可以简单地调用typeof(T)。name
:
public static string GetGenericTypeName<T>()
{
return typeof(T).Name;
}
公共静态字符串GetGenericTypeName()
{
返回typeof(T).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);
}
公共作废更改面板(T操作)
{
类型typeOfObject=someObject.GetType();
动作类型=动作类型(T);
FieldInfo字段=typeOfObject.GetField(typeOfAction.Name);
设置值(someObject,action);
}
不清楚您想要实现什么et.toString?也许可以尝试T.ToString()是的,那应该是workT是一个类型,而不是object。此方法旨在更改我的静态(ActionPanel)类,无论我执行什么操作,我都希望替换(ActionPanel)singleton~@Silvermind T中的相应变量是一个类型参数。这不是一个实例,如果我说一个Person
类带有一个重载的ToString()
方法,该方法在t
上调用ToString()
返回该人的名字和姓氏,将不会产生返回名字和姓氏的预期效果,我不得不以瓦拉马斯所说的为例来说明这一点。T实际上是一种类型。C#中的泛型要求您在
符号中指定类型(实际上在某些情况下可以推断,但这是基本思想)。谢谢您,先生!尽管我不能删除泛型,只使用“Action.GetType().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);
}