如何 return 字符串数组中包含 C# 中特定子字符串的字符串?

How to return the String from String Array that contains a particular Substring in C#?

我正在获取命令行参数的字符串数组,并检查是否有任何参数包含“.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# 方法可以让我在不手动遍历字符串数组的情况下执行此操作

您可以使用 LINQ:

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

将产生 null 如果没有这样的参数。


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

您可以尝试 SingleOrDefault(), so that you will get an exception if there are multiple .xml files are available in the list. I used EndsWith() 而不是 Contains(),这样条件将检查文件是否以 .xml 结尾。

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

如果您确定带有 .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);