2015-06-20 101 views
2

爲什麼編譯器不允許將int分配給對象?爲IQueryable分配IQueryable <int>時編譯出錯<object>

IQueryable<object> objects = null; 
IQueryable<int> ints = null; 
objects = ints; 
+0

您可以將其轉換爲'IQueryable '(OR)在分配前將其轉換爲'IQueryable '。 – Rahul

+0

你的項目的目標框架是什麼?是否有.NET Framework 3.5或更高版本? – elgonzo

+0

@elgonzo,我使用.Net框架4.5.1 – Albert

回答

1

隱式類型轉換(協方差函數)不適用於所有泛型。 SomeGeneric <的ValueType >不從到SomeGeneric <參考>獲得,因此,即使有一個已經爲類型參數的隱式轉換(在此情況下,拳擊)它是無效的投放。

如果你在C#4.0,通用接口可以使用ISomeGeneric <定義爲協變出Ť>和提供的通用參數是衍生彼此,然後就可以鑄造。如果泛型參數不是派生的,則不可能投射。

+1

那麼,IQuerable 的類型參數是協變的(即'IQueryable ')根據其[文檔](http://msdn.microsoft.com/en-us/library/bb351562.aspx)... hmm ... – elgonzo

+0

也許OP的目標是.NET 3.5或更高版本? – elgonzo

+1

檢查我剛剛做的編輯。通用協方差確實需要類型參數是彼此的派生。在OP的問題中,Int不從Object繼承,因此不應該是可轉換的。 –

相關問題