C#7.0中的泛型函数和ref返回
发布时间:2020-12-16 07:50:36 所属栏目:百科 来源:网络整理
导读:是否可以在C#7.0中使用ref returns功能定义一个泛型函数,它可以在Object的两个实例中同时进行字段的比较和更新?我想象的是这样的: void UpdateIfChangedTClass,TField(TClass c1,TClass c2,FuncTClass,TField getter){ if (!getter(c1).Equals(getter(c2))
是否可以在C#7.0中使用ref returns功能定义一个泛型函数,它可以在Object的两个实例中同时进行字段的比较和更新?我想象的是这样的:
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,(Thing t) => ref t.field2); 有没有办法指定一个Func类型或任何类型的泛型类型限制,通过要求getter返回引用来使其有效?我尝试了Func< TClass,ref TField>,但它似乎不是有效的语法. 解决方法
您将无法使用Func,因为它不会通过引用返回结果.您需要创建一个使用ref return的新委托:
public delegate ref TResult RefReturningFunc<TParameter,TResult>(TParameter param); 然后更改您的函数以使用该委托就足以使其工作: public static void UpdateIfChanged<TClass,RefReturningFunc<TClass,TField> getter) { if (!getter(c1).Equals(getter(c2))) { getter(c1) = getter(c2); } } 请注意,不能通过引用返回属性.您可以通过引用或任何其他变量返回字段,但属性不是变量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读