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

我有以下内容:

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

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

那这个呢:

 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 )以便更有效地查找 – 但是首先测试它,作为开销可以吃掉收益。

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

 public static bool In(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)); 
 var keyString = model.PartitionKey.Substring(2, 2); if (keyString == "05" || keyString == "06") { // ... } 

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

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

您可以在MSDN上阅读更多相关信息

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

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

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

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

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

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

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

但否则就是这样。

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

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

编辑: new []