我正在尝试创建一个辅助函数(对于一个类),它接受2个对象并比较两个类的属性
这些属性永远只能简单的类型,如string,int和bool
用法
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),以创建结果值.
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |