如果C#中的语句有更简单的方法吗?

时间:2012-07-06 07:48:22

标签: c#

我有以下内容:

if (model.PartitionKey.Substring(2, 2) == "05" || 
    model.PartitionKey.Substring(2, 2) == "06")

我更喜欢这个。是否有更简洁的方法来编码,我不必重复model.PartitionKey两次?

7 个答案:

答案 0 :(得分:11)

这个怎么样:

if (new string[]{"05", "06"}.Contains(model.PartitionKey.Substring(2, 2))
    // ...

这让你可以自由地保留你正在寻找的字符串......

var lookingFor = new string[]{"05", "06"};
var substring = model.PartitionKey.Substring(2, 2);
if (lookingFor.Contains(substring))
{
    // ...
}

如果您要查找的字符串列表长度超过两个,这将有很大帮助...此外,您可以将其添加到集合(HashSet<string>)以便更有效地查找 - 但是测试一下首先,由于管理费用会增加收益。

答案 1 :(得分:9)

对于这种情况,我使用扩展方法

public static bool In<T>(this T source, params T[] list)
{
   if (source = null)
       throw new NullReferenceException("Source is Null");

   return list.Contains(source);
}

并将其命名为

if (model.PartitionKey.Substring(2, 2).In("05", "06"))

作为一种扩展方法,我们可以为所有类型调用它,例如

if(myintegervariable.In(3, 4));

OR

if(mybytevariable.In(23, 56, 34, 43, 87, 155));

答案 2 :(得分:7)

var keyString = model.PartitionKey.Substring(2, 2);
if (keyString == "05" || keyString == "06")
{
    // ...
}

答案 3 :(得分:5)

我很惊讶没有人提供开关作为可能的选择:)

switch (model.PartitionKey.SubString(2,2)) {
  case "05":
  case "06":
    // do stuff
    break;
  // other cases
  default:
    // like an else
}

您可以在MSDN

了解更多相关信息

答案 4 :(得分:3)

您可以将子字符串保存在变量中:

var substring = model.PartitionKey.Substring(2, 2);
if (substring == "05" || substring == "06")

或者您可以使用正则表达式:

if (Regex.IsMatch("^..0[56]", model.PartitionKey))

这可能取决于您在阅读代码时能够轻松理解正则表达式。

答案 5 :(得分:1)

为了提高可读性,您可以将Substring提取到变量中,然后测试:

var partitionKeyBits = model.PartitionKey.Substring(2, 2);

if (partitionKeyBits == "05" || partitionKeyBits == "06") {

}

但除此之外是关于它的。

答案 6 :(得分:0)

if (new []{"05", "06"}.Contains(model.PartitionKey.Substring(2, 2))

语法可能很遥远,欢迎更正:)

修改:new []