【发布时间】:2018-01-27 08:29:19
【问题描述】:
是否可以使用 C# 7.0 中的 ref 返回功能定义一个通用函数,该函数可以在对象的两个实例中进行字段的比较和更新?我在想象这样的事情:
void UpdateIfChanged<TClass, TField>(TClass c1, TClass c2, Func<TClass, TField> getter)
{
if (!getter(c1).Equals(getter(c2))
{
getter(c1) = getter(c2);
}
}
预期用途示例:
Thing thing1 = new Thing(field1: 0, field2: "foo");
Thing thing2 = new Thing(field1: -5, field2: "foo");
UpdateIfChanged(thing1, thing2, (Thing t) => ref t.field1);
UpdateIfChanged(thing1, thing2, (Thing t) => ref t.field2);
有没有办法指定一个 Func 类型或任何类型的泛型类型限制,通过要求 getter 返回一个引用来使其有效?我试过Func<TClass, ref TField>,但它似乎不是有效的语法。
【问题讨论】:
标签: c# generics pass-by-reference c#-7.0