當返回下面的函數委託返回類型的對象不接受函數返回的Guid
public Guid GetUserFilterValue(string filterID)
由於
Func<string, object>
我得到的錯誤,它有錯誤的返回類型。如果我將返回類型更改爲Guid以外的任何其他類型,則會編譯它。有任何想法嗎?
當返回下面的函數委託返回類型的對象不接受函數返回的Guid
public Guid GetUserFilterValue(string filterID)
由於
Func<string, object>
我得到的錯誤,它有錯誤的返回類型。如果我將返回類型更改爲Guid以外的任何其他類型,則會編譯它。有任何想法嗎?
這通常會工作,如果返回值類型是引用類型,因爲Func<T, TResult>
是協變對於T;但Guid
是一種值類型,這就是爲什麼您的方法不適用於Func<string, object>
的有效候選人。
從MSDN:
差異僅適用於引用類型;如果爲變體類型參數指定值類型,則該類型參數對於生成的構造類型是不變的。
作爲一種變通方法,你可以使用lambda表達式:
Func<string, object> f = filterId => GetUserFilterValue(filterId);
這是因爲Guid
是value type,因此沒有與object
兼容的二進制表示。如果你需要這個方法適應於給定的簽名,你需要編寫boxes的Guid
爲對象的包裝功能:
Func<string, object> f = s => (object)GetUserFilterValue(s);
對不起,我意外編輯,我滾了回來...... –
@ThomasLevesque:不用擔心。 – Jon