【发布时间】:2015-08-04 21:52:15
【问题描述】:
我想通过两个对象中的每个属性合并两个对象,例如:
// simplified pseudo code
foreach property which is in both objects (compared by name) do
target.Property += src.Property;
我当前的方法如下所示:
private void MergeStats(Object src, Object target)
{
if (src == null || target == null) return;
foreach (var srcProperty in src.GetType().GetProperties())
{
var targetProperty = target.GetType().GetProperty(srcProperty.Name);
if (targetProperty == null) { continue; }
if (targetProperty.GetValue(target).GetType() != typeof(UInt32)) { continue; }
if (srcProperty.GetValue(src).GetType() != typeof(UInt32)) { continue; }
var currentValue = (UInt32)(targetProperty.GetValue(target));
var itemValue = (UInt32)(srcProperty.GetValue(src));
var newValue = currentValue + itemValue;
target.GetType().GetProperty(srcProperty.Name).SetValue(target, newValue);
}
}
但我想像这样更通用一点:
private void MergeStats<T>(Object src, Object target) where T : ??? { }
所以我的问题是:是否有任何 Baste 类型定义了一个对象是 summable?
【问题讨论】:
-
private void MergeStats<T>(T src, T target) where T : ISummable { }? -
struct会得到你int和float(和朋友),但它显然是一个不精确的约束。 -
您可以使用
dynamic执行此操作,但这也会添加strings 和任何其他具有+运算符的类型。您需要缩小可以添加的类型。还是您真的想要所有可以添加的类型?
标签: c#