繁体   English   中英

C#反射和通用GetValue转换

[英]C# reflection and generic GetValue convertion

如果我们有不同的领域,例如

int a;
bool b;
float c;

那么当我们通过反射获得其值时,必须使用以下转换

a=(int)FieldInfo.GetValue(...);
b=(bool)FieldInfo.GetValue(...);
c=(float)FieldInfo.GetValue(...);

是否有通用方法获取值,以便可以使用foreach迭代?

foreach(FieldInfo info in type.GetFields())
{
   var v=(T)info.GetValue(...);
}

除非您希望将对象存储在特定于类型的变量中,否则没有理由知道对象的类型。 变量的类型必须在编译时声明(是的,即使使用var声明了该变量,也可以在编译时对其进行扩展)。 因此,即使您可以编写一个通用方法来将GetValue作为特定类型返回,这在您描述的场景中也不是完全有用的,因为您仍然不知道编写什么代码来声明要放入变量的代码。入。

话虽这么说,但编写一个通用方法非常简单:

static class ExtensionMethods
{
    public static T GetTypedValue<T>(this FieldInfo This, object instance)
    {
        return (T)This.GetValue(instance);
    }
}

您可以这样称呼它:

bool someFlag = fieldInfo.GetTypedValue<bool>(instance);
int someNum = fieldInfo.GetTypedValue<int>(instance); 

或(生成相同的IL代码):

var someFlag = fieldInfo.GetTypedValue<bool>(instance);
var someNum = fieldInfo.GetTypedValue<int>(instance); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM