簡體   English   中英

具有Func參數的泛型方法,Func協方差似乎不起作用

[英]Generic method with Func parameter, Func contravariance doesn't seem to work

編寫.NET的Func<T1, T2, TResult> ,以便T1T2是互變的,而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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM