假设我正在使用第三方库中的多个类,所有这些类都包含一个int ID {get;}属性.例如:
class A {
...
int ID {get;}
...
}
class B {
...
int ID {get;}
...
}
Run Code Online (Sandbox Code Playgroud)
ID 我需要在我正在编写的方法中使用的唯一属性,它需要引用A或B.我已经声明了一个接口:
interface IHasID
{
int ID {get;}
}
Run Code Online (Sandbox Code Playgroud)
但我不能把两种A或B作为IHasID叫我的方法时.
例如,在Swift中,我可以声明一个符合"协议"(Swift的接口版本)的扩展.我没有看到用C#做到这一点的方法.引用共享属性的不相关类的最接近方式是什么?
您可以使用通用方法以及ID的选择器,而不是包装类.这里的用法很简单,但在某些情况下这种模式很有用.
public void MyMethod<T>(T value, Func<T, int> selectId)
{
var id = selectId(value);
}
Run Code Online (Sandbox Code Playgroud)
和
MyMethod<A>(a, value => value.ID);
MyMethod<B>(b, value => value.ID);
Run Code Online (Sandbox Code Playgroud)
可以缩短为
MyMethod(a, value => value.ID);
MyMethod(b, value => value.ID);
Run Code Online (Sandbox Code Playgroud)
请注意,即使它们看起来相同,但两个lambda不完全相同.
Func<A, int> VS Func<B, int>
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |