基本上,這將是相當於此,但是100%保證工作?如何檢查IEnumerable <T>是否是IInterface?
object x = new List<MyTypeWhichImplementsIInterface>();
bool shouldBeTrue = x is IEnumerable<IInterface>;
從一些粗略的測試它似乎工作,但我不知道。
基本上,這將是相當於此,但是100%保證工作?如何檢查IEnumerable <T>是否是IInterface?
object x = new List<MyTypeWhichImplementsIInterface>();
bool shouldBeTrue = x is IEnumerable<IInterface>;
從一些粗略的測試它似乎工作,但我不知道。
這將在C#4中工作,但不適用於以前的版本。
is
語句利用了泛型類型參數的協方差,這是C#4中添加的一項功能。在C#4之前,該語句是錯誤的。
它的工作原理是IEnumerable<T>
實際上是IEnumerable<out T>
。如果沒有<T>
上的差異說明符,它將無法工作。
所以,只要你的接口有正確的方差說明符,並且只要雙方的'T'滿足方差的類型,就沒關係。
如果沒有in/out
說明符,那麼T必須完全匹配才能使演員成功,並且只有CSJ提供的手動檢查纔是唯一的選項。
這應該在使用.NET 4 – Lee
@lee這真棒:d –