在下面的代碼中,編譯器顯然不能確定「t」的正確類型。C#IS運算符不能用於lambda表達式嗎?
_supportedElements.Any(t => element is t)
將鼠標懸停在第二個t之上並沒有像往常那樣提及類型。編譯器給出了一個沒有類型或名稱空間t的錯誤。當我更改爲
private Type[] _supportedElements = { typeof(TextField), typeof(CheckBox), typeof(RadioButton), typeof(SelectList), typeof(TableRow), typeof(Link), typeof(Button) };
:
_supportedElements.Any(t => elementGetType() == t)
沒有編譯器錯誤,並且還徘徊第二噸以上鼠標正確地指出的類型
_supportedElements被定義爲。但我真的需要使用IS運算符。
這是Visual Studio 2013 SP4中的怪癖還是我自己......?
編輯:
所有的迴應後,它很清楚,現在的怪癖是在我這裏 我的目的是創建一個類型來驗證當前的類型與數組。這是不可能的,我沒有意識到當我用「typeof」包圍類名時,我創建了一個實例數組。 錯誤消息被我誤解爲「你沒有聲明t,我不知道它」,而不是「你必須在」is「之後使用Type,而不是類型實例」。
我真的很感激例子和替代方案的快速反應。希望我會對其他人在Stackoverflow站點有所幫助:-)
爲什麼你需要使用'is'運營商? – 2015-02-09 12:27:39
什麼是'元素'? – Yuck 2015-02-09 12:28:20
因爲_supportedElements是一個類型數組,所以is運算符看起來不太可能是你想要的,也就是說它們全都是x是System.Type而不是其他很多其他的 – tolanj 2015-02-09 12:30:51