3

我有以下内容:

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

我有更多这样的。有没有更简洁的方法来编写代码,我不必重复 model.PartitionKey 两次?

4

7 回答 7

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))
{
    // ...
}

如果您要查找的字符串列表长于两个,这将有很大帮助...此外,您可以将其添加到 set ( HashSet<string>) 以进行更有效的查找 - 但首先对此进行测试,因为开销会消耗收益.

于 2012-07-06T07:53:03.260 回答
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));

或者

if(mybytevariable.In(23, 56, 34, 43, 87, 155));
于 2012-07-06T07:58:03.343 回答
7
var keyString = model.PartitionKey.Substring(2, 2);
if (keyString == "05" || keyString == "06")
{
    // ...
}
于 2012-07-06T07:50:17.850 回答
5

我很惊讶没有人提供 switch 作为一种可能的选择:)

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

您可以在MSDN上阅读有关它的更多信息

于 2012-07-06T08:15:06.830 回答
3

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

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

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

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

这可能在一定程度上取决于您在阅读代码时理解正则表达式的难易程度。

于 2012-07-06T07:50:07.620 回答
1

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

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

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

}

但除此之外就是这样。

于 2012-07-06T07:51:17.943 回答
0

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

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

编辑:new []

于 2012-07-06T07:53:04.997 回答