2016-04-25 47 views
1

我有一個包含各種類型元素的數組。Visual C#用lambda表達式檢查數組元素的類型

我想構建一個lambda表達式,如果數組中存在特定的類型,將評估if子句爲真。

我嘗試以下和許多不同的方法,但我似乎並沒有得到它的權利:

var arraySourceText = EditorController.ActiveDocument 
             .ActiveSegmentPair 
             .Source 
             .AllSubItems 
             .ToArray(); 

if (arraySourceText.Any(o => o.GetType()) == typeof(string)) 
{ 
    intStartingPH++; 
} 

任何意見是值得歡迎的。

注意:arraySourceText是一個帶有自定義類型的API IEnumerable。爲了簡化僞碼,我只假設了string

更新:由於該類型未通過API公開,只有類型的名稱,該解決方法基於Byyo的更正。我寫了一個單獨的方法來檢查類型的名稱,並返回一個bool

04381​​
+1

你的括號是錯誤的(也許一個錯字雖然):'arraySourceText.Any(O => o.GetType()== typeof運算(字符串)' –

+0

感謝回覆,我添加了declaratio陣列中的一個和澄清的筆記。 – ib11

回答

1

似乎有錯誤在你的括號

         v     v 
if (arraySourceText.Any(o => o.GetType()) == typeof(string)) // your approach 
if (arraySourceText.Any(o => o.GetType() == typeof(string))) // correct approach 

而是檢查每個元素是string,你檢查的Any()的結果是typeof(string)

+0

謝謝。我懂了。我糾正了這一點,但後來我在編譯我的插件後意識到,實際上API的這部分內容並未公開。所以我擰了。我需要重寫我的代碼以解決它...但感謝您的期待。 – ib11

+0

尤里卡!我做了一個工作,我只使用類型的淺層版本,將其轉換爲ToString(),然後檢查其字符串值。我寫了一個靜態方法,它執行此操作,如果匹配返回true,否則返回false。但是你的回答讓我看到了lambda表達式部分的解決方案! – ib11