假設我使用協變型別引數 a 實體化了一個泛型類struct,然后我將新創建的物件轉換為自身,并使用型別引數object代替struct,轉換將失敗,盡管差異應該允許它。
例子:
public class Succeeds {}
public struct Fails {}
var castSucceeds = (IEnumerable<object>)Enumerable.Empty<Succeeds>();
var castFails = (IEnumerable<object>)Enumerable.Empty<Fails>();
正如您從上面看到的,由于IEnumberable<T>協變的泛型型別,此轉換有效,但是當嘗試使用 astruct而不是 a 時,class它失敗了。我懷疑失敗與將結構轉換為物件時需要裝箱有關。
有什么辦法可以解決這個問題,還是我看錯了?
uj5u.com熱心網友回復:
根據微軟的說法:
差異僅適用于參考型別;如果為變體型別引數指定值型別,則該型別引數對于生成的構造型別是不變的。
嘗試進行手動轉換:
var castFails = Enumerable.Empty<Fails>().Cast<object>();
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/340351.html
上一篇:打字稿下載PDF檔案
