我正在尝试在不同对象之间映射属性值(通过反射)。这似乎在可空值的类型上奇怪地失败了。以下代码:
destProperty.SetValue(destObject, sourceProperty.GetValue(sourceObject, null), null);
如果destProperty是可以为空的值类型,将destProperty设置为null
,尽管sourceProperty具有值。
当然,这是一项相当普遍的任务 - 我一定会错过一些简单的事情吗?
答案 0 :(得分:1)
你发布的内容对我有用。刚刚运行以下内容。之后destObject.b等于110。请注意最终的代码行是逐字记录的。
class Foo {
public int? a { get; set; }
public int? b { get; set; }
static void Main(string[] args) {
var destObject = new Foo { a = 1, b = 2 };
var sourceObject = new Foo { a = 110, b = 112 };
var destProperty = typeof(Foo).GetProperty("b");
var sourceProperty = typeof(Foo).GetProperty("a");
destProperty.SetValue(destObject, sourceProperty.GetValue(sourceObject, null), null);
}
}
答案 1 :(得分:1)
看起来不错 - 我在目的地中获得正确的值:
internal class Test
{
public Test()
{
Source = 15;
}
public int? Source { get; private set; }
public int? Destination { get; private set; }
}
var testType = typeof( Test );
var sourceProperty = testType.GetProperty( "Source" );
var destProperty = testType.GetProperty( "Destination" );
var test = new Test();
destProperty.SetValue( test, sourceProperty.GetValue( test, null ), null );
答案 2 :(得分:0)
这很简单 - 除非先设置某些其他属性,否则写入此特定类的destProperty似乎会忽略set调用。我非常肯定我不会对这种公然违反我们的编码标准负责,所以我要把这个归咎于另一个人。很确定。
感谢Jimmy& tanascius确认它应该工作。