如何创建接受相同Type,属性的2个对象并比较值的方法

AAA*_*ddd 5 c# compare

我正在尝试创建一个辅助函数(对于一个类),它接受2个对象并比较两个类的属性

这些属性永远只能简单的类型,如string,intbool

用法

Compare(widget1,widget2,x => x.Name)
Run Code Online (Sandbox Code Playgroud)

到目前为止我有什么

  private void CompareValue<T>(Order target, Order source, Func<Order, T> selector)
  {
     if(target.selector != source.selector)
     {
       // do some stuff here
     }
  }
Run Code Online (Sandbox Code Playgroud)

显然上面的代码不起作用

Ree*_*sey 10

您可以添加约束到IEquatable<T>:

private void CompareValue<T>(Order target, Order source, Func<Order, T> selector)
    where T : IEquatable<T>
{
    if (!selector(target).Equals(selector(source))
    {
        // ... Do your stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

这将处理您指定的类型(以及许多其他类型),并允许编译器保护您免受可能不合适的用例.

请注意,您还需要调用Func<T,U>,即:selector(target)selector(source),以创建结果值.