2016-04-25 190 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