[英]Generic method with Func parameter, Func contravariance doesn't seem to work
編寫.NET的Func<T1, T2, TResult>
,以便T1
和T2
是互變的,而TResult
是協變的。
這意味着:
Func<object, object, bool> objectEquals = object.Equals;
Func<MyObject, MyObject, bool> myObjectEquals = objectEquals;
是有效的分配。
現在,我有了一個類,其中包含遵循以下方法的方法:
public void DoSomething<T>(T value)
{
DoSomethingCore(T, Object.Equals);
}
protected abstract void DoSomethingCore<T>(T value, Func<T, T, bool> equals);
該代碼將無法編譯,並出現以下錯誤:
CS0123'object.Equals(object,object)'沒有重載匹配代表'Func <T,T,bool>'
為什么在這種情況下,逆向似乎不起作用?
總體而言,矛盾和差異不適用於值類型 。
因此,如果要使用Object.Equals
作為Func<T, T, bool>
的函數,則必須限制DoSomething
方法以僅與引用類型一起使用。
換句話說,在方法簽名中添加where T : class
:
public void DoSomething<T>(T value) where T : class
{
DoSomethingCore(T, Object.Equals);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.