是否有更好的方法来编写if语句来查找变量以匹配其中一个变量?

时间:2011-12-25 07:32:05

标签: c#

我需要检查变量是否具有几个不同的值之一。目前我有这样的代码:

if (cName == "Products" || cName == "Packages" || cName == "Contents" || cName == "Packages") 
..
if (cName == "Products" || cName == "Packages" || cName == "Contents") 
..
etc

对我来说,它看起来并不干净。是否有一些更简单的单行方式我可以做这个检查?一些代码,我不必继续重复cName?

5 个答案:

答案 0 :(得分:6)

switch (cName) 
{
    case "Products":
    case "Packages":
    case "Contents": // If cName is one of the above, execute code below
        ... // DO STUFF
        break;
    case "Some-other-value": // if cName is exactly Some-other-value, execute code below
        .. // DO STUFF
        break;
}

答案 1 :(得分:4)

C#方式被认为是the lambda way

if( System.Array.Find( new string[]{ "Products", "Packages", "Contents" }, (s) => s == cName ) != null )
..

或者,或者:

using System.Linq;
..
if( new string[]{ "Products", "Packages", "Contents" }.Any( s => s == cName ) )
..

答案 2 :(得分:3)

ICollection.Contains(或Enumerable.Any)可能值得调查...

var standardCategories = new [] { "Products", "Packages", "Contents" };
if (standardCategories.Contains(cName) || cName == "Fred") {
    ...
} else if (standardCategories.Contains(cName)) {
    ...
}

请注意,这确实会引入"额外的开销",fsvo - 大部分时间它只是不重要但能够捍卫你的决定:)至于我,我任何一天都要采用更整洁的代码,并且从未遇到过这种方法的问题,但我也不是游戏开发者。

(在这种特殊情况下,我使用嵌套 if语句,因为谓词似乎可以修改;上面的代码只是一个使用示例。注意我使用&# 34; Fred" as" Packages"正在检查......两次。)

快乐的编码。

答案 3 :(得分:3)

您还可以查看扩展方法。

public static class StringExtensions
{
    public static bool EqualsAny(this string s, params string[] args)
    {
        return args.Contains(s);
    }

}

然后你可以使用这个ike:

string cName = "Products";

if (cName.EqualsAny("Products", "Packages", "Contents", "Packages"))
{
}

答案 4 :(得分:2)

List<string> myMatchList = new List<string> { "Products", "Packages", "Contents" };
if ( myMatchList.Contains ( cName ) )

或“内联版本”(请注意,它不是内存/ CPU效率)

if ( (new List<string> { "Products", "Packages", "Contents" }).Contains ( cName ) )