2016-04-25 13 views
1

私はさまざまな種類の要素を含む配列を持っています。ビジュアルC#ラムダ式の配列要素の型チェック

特定の型が配列に存在する場合、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

あなたの括弧すべきAny()の結果は、(ただし、おそらくタイプミス)間違っている: 'arraySourceText.Any(O => o.GetType()== typeof演算(文字列)返信用' –

+0

おかげで、私はdeclaratioを追加しましたnの配列と明確な注釈を含む。 – ib11

答えて

1

代わりstringする各要素をチェックするあなたの括弧内のエラー

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

があるようです、あなたがチェックtypeof(string)

+0

ありがとうございます。そうですか。私はそれを修正しましたが、プラグインをコンパイルした後、APIのこの部分が公開されていないことに気付きました。だから私はうんざりした。私はそれを回避するためにコードを書き直す必要があります...しかし、探していただきありがとうございます。 – ib11

+0

ユーレカ!私は回避策を講じ、ToString()を変換して文字列値をチェックすることで、タイプの浅いバージョンのみを使用しました。私は静的メソッドを書いています。これはこれを行い、一致すればtrue、そうでなければfalseを返します。しかし、あなたの答えはラムダ式の部分の解決につながっています! – ib11