【问题标题】:Visual C# check type of array elements with lambda expressionVisual C# 使用 lambda 表达式检查数组元素的类型
【发布时间】:2016-04-25 06:56:22
【问题描述】:

我有一个包含各种类型元素的数组。

我正在尝试构建一个 lambda 表达式,如果数组中存在特定类型,它将评估 if 子句为 true。

我尝试了以下和许多不同的方法,但我似乎没有做对:

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

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

欢迎任何建议。

注意:arraySourceText 是具有自定义类型的 API IEnumerable。为简单起见,我只是假设string 在伪代码中。

更新:因为 API 没有公开类型,只有类型的名称,解决方法是基于 Byyo 的更正。我写了一个单独的方法来检查类型的名称并返回一个bool

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

string typePH = "PlaceholderTag";

if (arraySourceText.Any(o => IsMatchTypeString(typePH, o)))
    {
        intStartingPH++;
    }

//Then the below method does the check:

static bool IsMatchTypeString(string testtype, params object[] items)
{
    if (items.Length == 0)
    {
        return false;
    }
    else if (testtype == items[0].GetType().ToString())
    {
        return true;
    }
    else
    {
        return false;
    }
}

【问题讨论】:

  • 你的括号错了(虽然可能是错字):arraySourceText.Any(o => o.GetType()== typeof(string)
  • 感谢回复,我添加了数组的声明和澄清说明。

标签: c# arrays visual-studio plugins lambda


【解决方案1】:

您的括号中似乎有错误

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

您检查Any() 的结果是typeof(string),而不是检查每个元素是string

【讨论】:

  • 谢谢。我懂了。我更正了这一点,但在编译我的插件后我意识到实际上这部分 API 并未公开。所以我搞砸了。我需要重写我的代码来解决它......但是感谢您的关注。
  • 尤里卡!我做了一个解决方法,我只使用了该类型的浅版本,将其转换为ToString(),然后检查其字符串值。我写了一个静态方法,它执行此操作,如果匹配则返回 true,否则返回 false。但是你的回答让我找到了 lambda 表达式部分的解决方案!
猜你喜欢
  • 2014-11-20
  • 1970-01-01
  • 2014-05-25
  • 2014-09-16
  • 2019-12-14
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2011-01-20
相关资源
最近更新 更多