今天真的把我难倒了。我确信这并不难,但我有一个System.Reflection.PropertyInfo对象。我想根据数据库查找的结果来设置它的值(比如ORM,将一个列映射回一个属性)。
我的问题是,如果DB返回值是DBNull,我只想将属性值设置为其默认值,这与调用:
value = default(T); // where T is the type of the property.
然而,如果你给default()方法一个Type,它将不会被编译,这就是我所拥有的:
object myObj = ???; // doesn't really matter. some arbitrary class.
PropertyInfo myPropInf = ???; // the reflection data for a property on the myObj object.
myPropInf.SetValue(myObj, default(myPropInf.PropertyType), null);
上面的代码不能编译。默认(类型)无效。我也考虑过这样做:
object myObj = ???;
PropertyInfo myPropInf = ???;
myPropInf.SetValue(myObj, Activator.CreateInstance(myPropInf.PropertyType), null);
但是,如果Type是string,则会赋值为"new String()",但我确实想要"null",这是"default(string)“将返回的值。
那么我在这里错过了什么呢?我认为一种非常老套的方法是创建myObj的Type的新实例并复制属性,但这看起来很愚蠢……
object myObj = ???;
PropertyInfo myPropInf = ???;
var blank = Activator.CreateInstance(myObj.GetType());
object defaultValue = myPropInf.GetValue(blank, null);
myPropInf.SetValue(myObj, defaultValue, null);
我不想浪费内存来创建一个全新的实例,只是为了获取属性的默认值。看起来很浪费。
有什么想法吗?
https://stackoverflow.com/questions/407337
复制相似问题