C# 泛型:你能转换为字符串吗?

本文关键字:转换 字符串 泛型 你能 | 更新日期: 2023-09-27 18:32:25

这里快速一个~我想这样我就可以用该类型替换变量~

public void ChangePanel<T>(T Action){
    FieldInfo Field = T.GetField(T.toString);
    Field.SetValue(SomeObject, Action);
}

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

编辑:仅供参考,某个对象中的变量与类型具有相同的名称

C# 泛型:你能<T>转换为字符串吗?

可以使用

typeof 关键字获取 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);
}

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

此外,反射选项是;

 typeof(T).Name

 Action.GetType().Name

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

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

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

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

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