在应用程序中我有了一个字段信息可空<INT>一些代码,我需要像波纹管样品中检索空值(而不是基础值):如何通过FieldInfo.GetValue()获得可空的<T>(而不是基础值)?
class Test
{
public int? value;
}
public class Program
{
static void Main(string[] args)
{
var obj = new Test { value = 10 };
var fld = typeof (Test).GetField("value");
var v = fld.GetValue(obj);
System.Diagnostics.Debug.WriteLine(v.GetType().FullName);
System.Diagnostics.Debug.WriteLine(fld.FieldType.FullName);
}
}
我的问题是, v始终指定底层值(在此示例中为int),而不是可空(在此示例中为可空的<int>)。
PS:真正的应用程序在编译时没有可为空的类型,所以无法进行强制转换。
在此先感谢您的帮助。
这就是当你将一个'可为空'时发生的情况。你可以将对象解除“int”或“int?',但不是没有强制转换。 –
dtb
@dtb我明白,当拳击空行时运行时将实际上框的基础价值。但是当我调用fld.GetValue(obj)时,唯一的拳击操作发生了。我期望FieldInfo有这个方法的一个通用版本(所以我可以完全避免装箱),或者运行时会以不同的方式处理(以相同的方式,它对拳击的处理方式不同) – Vagaus