【问题标题】:How to return the String from String Array that contains a particular Substring in C#?如何从包含 C# 中特定子字符串的字符串数组返回字符串?
【发布时间】:2021-10-23 15:03:18
【问题描述】:

我正在获取命令行参数的字符串数组并检查是否有任何包含“.xml”子字符串的参数

string[] args = this.Command.GetCommandLineArgs();
string strXMLFileName = string.Empty;
for (int i = 0; i < args.Length; ++i)
{
    if (args[i].Contains(".xml"))
    {
        strXMLFileName = args[i];
    }
}

我在 List 方法中搜索了一下,但找不到任何可以简化流程的方法

我假设只有 1 个带有“.xml”子字符串的参数

是否有任何内置的 C# 方法可以在不手动迭代字符串数组的情况下执行此操作

【问题讨论】:

    标签: c# string loops arraylist substring


    【解决方案1】:

    你可以使用LINQ:

    var strXMLFileName = args.FirstOrDefault(x => x.Contains(".xml"));
    

    如果没有这样的论点,将产生null


    注意:对于搜索字符串".xml"EndsWith 通常比Contains 更合适。

    【讨论】:

    • 如果文件名是pra.xml.txt怎么办?您的查询会将其存储为 strXMLFileName。这不是预期的吗?
    • @PrasadTelkikar:这就是我添加“NB”评论的原因。 OP明确写了“包含一个“.xml”子字符串”,所以我不敢自己改变它。我正要添加关于 SingleOrDefault 的评论,这是一个引发异常的替代方案,但你打败了我。 :-)
    • 如果没有找到值,“第一个或默认”返回“null”。如何对其进行编码以将 string.Empty 作为返回值。我知道我检查是否为 null 并相应地分配,但是是否有 FirstOrDefault 的重载,我可以在其中指定默认值?
    • 我找到了。这 ??运营商帮助。
    【解决方案2】:

    你可以试试SingleOrDefault(),这样如果列表中有多个.xml文件,你就会得到一个异常。我使用EndsWith() 而不是Contains(),因此该条件将检查文件是否以.xml 结尾。

    var strXMLFileName = args.SingleOrDefault(x => x.EndsWith(".xml")) ?? string.Empty;
    

    【讨论】:

      【解决方案3】:

      如果您确定带有.xml 的字符串在数组中:

      var arr = new string[]
      {
          "file1.txt",
          "file2.xml",
          "file3.xml",
      };
      
      var strXMLFileName = arr.First(x => x.EndsWith(".xml"));
      
      System.Console.WriteLine(strXMLFileName);
      

      如果您不确定:

      var arr = new string[]
      {
          "file1.txt",
          "file2.xml",
          "file3.xml",
      };
      
      var strXMLFileName = arr.FirstOrDefault(x => x.EndsWith(".xml"));
      
      System.Console.WriteLine(strXMLFileName);
      

      【讨论】:

      • 您确实意识到Enumerable.FirstSystem.Linq 命名空间中,因此被认为是LINQ 的一部分?
      • 这段代码也在使用 LINQ。没有看到这样的额外优势。
      • 是的,我的错,对不起
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-20
      • 2020-08-26
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2017-10-19
      • 2014-10-18
      相关资源
      最近更新 更多