簡體   English   中英

檢查多列列表是否包含字符串

[英]Check if List with multiple Columns contains string

我如何檢查列表 RequirementList 的第一列是否包含字符串/元素

 public class RequirementList
  {
    public string? Name{ get; set; }
    public string? Value { get; set; }
  }

在這里檢查:

var requirementList = new List<RequirementList>();
//requirementList is already filled

  if(requirementList.Name.Contains("Test"))
{
     //do something
}

考慮到這里的 Name 可以是 null,你應該這樣做:

if(requirementList.Any(x=>x.Name is not null && x.Name.Contains("Test"))

請注意,此處的Contains將區分大小寫。 您可以檢查此答案以處理不區分大小寫的情況Case insensitive 'Contains(string)'

要用現代的 c# 完成或賦予另一種風味,您可以將其寫為

if(requirementList.Any(x=>x?.Name.Contains("Test") ?? false)

你似乎對列表和屬性有一些誤解,所以我會盡量讓它更清楚一點。 其中一些已被其他人提到。

首先,如果不是列表,不要調用列表。 RequirementList應該稱為RequirementItem或只是Requirement

現在您的定義如下所示:

var requirementList = new List<Requirement>();

看,這已經更合乎邏輯了。

其次,Name 和 Value 是 Requirement 的屬性,它們不是列,您不應該這樣想。 因此first不適用,沒有 first 屬性

public class Requirement
{
    public string? Name{ get; set; }
    public string? Value { get; set; }
}

相當於

public class Requirement
{
    public string? Value { get; set; }
    public string? Name{ get; set; }
}

最后看起來你想對名稱中帶有測試的要求做一些特殊的事情,所以你應該先 select 要求:

var requirementList = new List<Requirement>();
...
var testRequirements = requirementList.Select(x=>x?.Name.Contains("Test"));
if (testRequirements.Any())
{
    foreach (var req in testRequirements)
    {
        // do something with req
    }
}

這為您省去了先執行Any然后再執行 select 那些您需要處理的麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM