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);
}