c# – 通过反射设置属性Nullable <>

我尝试设置一个Nullable财产动态.

我得到我的财产ex:

PropertyInfo property = class.GetProperty("PropertyName"); // My property is Nullable<> at this time So the type could be a string or int

我想通过反射来设置我的财产

property.SetValue(class,"1256",null);

当我的属性是Nullable<>时,它不起作用通用.所以我试图找到一种方式来设置我的财产.

要知道我的可空的<>的类型财产我执行

Nullable.GetUnderlyingType(property.PropertyType)

任何想法 ?

>我尝试创建一个我的Nullable<>财产与

var nullVar = Activator.CreateInstance(typeof(Nullable&)).MakeGenericType(new Type [] {Nullable.GetUnderlyingType(property.PropertyType)}));

但nullVar始终为空

解决方法

如果要将任意字符串转换为Nullable的底层类型,可以使用Convert类:
var propertyInfo = typeof(Foo).GetProperty("Bar");
object convertedValue = null;
try 
{ 
    convertedValue = System.Convert.ChangeType("1256",Nullable.GetUnderlyingType(propertyInfo.PropertyType));
} 
catch (InvalidCastException)
{
    // the input string could not be converted to the target type - abort
    return;
}
propertyInfo.SetValue(fooInstance,convertedValue,null);

如果目标类型为int,short,long(或无符号变体,因为输入字符串表示非负数),double,float或decimal,则此示例将起作用.警告:这不是快速代码.

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString(&quot;x2&quot;));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable&lt;Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include &quot;WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...