我有两个对象(域和数据),在这种情况下具有相同的属性(让我们假定名称)。我有一个Action<DomItem>
我希望投放到Action<DataItem>
。
public class DomItem {
public string Name { get; set; }
}
public class DataItem {
public string Name { get; set; }
}
public class Program {
public Program() {
Action<DomItem> domAction = new Action<DomItem>(x=>x.Name = "Test");
// Something Casted To Action<DataItem>(x=>x.Name = "Test");
}
}
当然这只是一个基本的例子。根据设计,我不能使用通用接口。我不关心DataItem
可能没有相同的属性。
我一直在研究Expressions和其他一些解决方案,但我无法弄清楚如何创建Cast(或者得到&#34; x =&gt; x.Name = ... &#34;部分来自方法)。
任何帮助都会非常感激!
答案 0 :(得分:1)
您无法直接或间接地将Action<DomItem>
投射到Action<DataItem>
,但您可以使用转换器包裹该动作,该转换器可转换来自{的输入{1}}到DataItem
并在副本上运行原始操作:
DomItem
明显的缺点是该操作将应用于原始对象的副本而不是原始对象本身。如果不确切知道这个动作是什么,我就不知道如何去做&#34;演员&#34;没有共同基类型的动作。