C# 检查数组项的字符串并匹配它

C# 检查数组项的字符串并匹配它,c#,arrays,string,match,string-matching,C#,Arrays,String,Match,String Matching,我有一个字符串和一个数组,我想检查这个字符串,看看这个字符串是否包含数组中的任何字符串 我的数组最多包含10个元素 string[] stringArray = { "apple", "banana", "orange" }; string text="I want an apple"; public static string getItem(string text) { //check text for stringArray items //return item (ap

我有一个字符串和一个数组,我想检查这个字符串,看看这个字符串是否包含数组中的任何字符串

我的数组最多包含10个元素

string[] stringArray = { "apple", "banana", "orange" };
string text="I want an apple";

public static string getItem(string text)
{
    //check text for stringArray items
    //return item (apple, banana, orange)
}
string item = getItem(text);
因此,我要寻找的是创建一个从中返回项的方法。另外,我想知道是否有其他方法可以使用Enum或List实现这一点

最后我制定了这样的方法

public static string getItem(string text)
        {
            string[] stringArray = { "Apple", "Banana", "Orange" };
            string item = stringArray.Where(s => text.ToUpper().Contains(s)).DefaultIfEmpty("None").FirstOrDefault();;
            return item;
        }

只需要一点灵气,这是因为很容易:

return stringArray.Where(s => text.Contains(s)).FirstOrDefault();
这假设您只想返回第一个匹配的字符串,并且希望进行区分大小写的比较。如果没有,可以相对容易地进行一些小的修改来改变情况


如果您的源代码也是
列表
(实际上,任何实现
IEnumerable
的代码都可以替代它),那么上面的代码也同样有效。另一方面,
Enum
,并不适合这种情况。

只是有点模糊,这是因为很容易:

return stringArray.Where(s => text.Contains(s)).FirstOrDefault();
这假设您只想返回第一个匹配的字符串,并且希望进行区分大小写的比较。如果没有,可以相对容易地进行一些小的修改来改变情况


如果您的源代码也是
列表
(实际上,任何实现
IEnumerable
的代码都可以替代它),那么上面的代码也同样有效。另一方面,
枚举
不适合这种情况。

您可以将其设置为
列表,而不是数组。然后在
getItem()
中,您可以执行以下操作:

List<string> stringList; // populate how you see fit
string text="I want an apple";

public static string getItem(string text)
{
    foreach(var s in stringList)
    {
        if(text.Contains(s))
        {
            // do stuff here
        }
    }
}
List-stringList;//填充您认为合适的内容
string text=“我想要一个苹果”;
公共静态字符串getItem(字符串文本)
{
foreach(stringList中的变量s)
{
如果(文本包含)
{
//在这里做事
}
}
}

foreach
循环不需要
列表。拥有它真是太好了。

您可以将其设置为
列表,而不是数组。然后在
getItem()
中,您可以执行以下操作:

List<string> stringList; // populate how you see fit
string text="I want an apple";

public static string getItem(string text)
{
    foreach(var s in stringList)
    {
        if(text.Contains(s))
        {
            // do stuff here
        }
    }
}
List-stringList;//填充您认为合适的内容
string text=“我想要一个苹果”;
公共静态字符串getItem(字符串文本)
{
foreach(stringList中的变量s)
{
如果(文本包含)
{
//在这里做事
}
}
}

foreach
循环不需要
列表。拥有它真是太好了。

没有理由将字符串数组更改为字符串列表。这段代码将同时适用于这两种情况。对。但他问是否有办法使用
列表
。我只是在给大家指路,没有理由把字符串数组改成字符串列表。这段代码将同时适用于这两种情况。对。但他问是否有办法使用
列表
。我只是在指路。很好,我得到了它,但是如果我的数组列表中没有匹配的东西呢。如果没有匹配项,我想返回/获取“无匹配项”。我应该用一个简单的if吗?如果(item==null)item=“无法匹配”@匿名-您可以在Where和FirstOrDefault之间粘贴DefaultIfEmpty(“无法匹配”),如果未找到匹配项,这将导致FirstOrDefault返回您想要的结果。非常感谢。最后一件事是,我想忽略区分大小写的。@Incognito-您必须使用IndexOf而不是Contains。寻找需要StringComparison的重载:我将文本转换为大写似乎更容易。很好,我得到了它,但是如果我的数组列表中没有匹配的内容怎么办。如果没有匹配项,我想返回/获取“无匹配项”。我应该用一个简单的if吗?如果(item==null)item=“无法匹配”@匿名-您可以在Where和FirstOrDefault之间粘贴DefaultIfEmpty(“无法匹配”),如果未找到匹配项,这将导致FirstOrDefault返回您想要的结果。非常感谢。最后一件事是,我想忽略区分大小写的。@Incognito-您必须使用IndexOf而不是Contains。寻找需要StringComparison的重载:我将文本转换为大写,这似乎更容易做到。