2

首先,对不起,如果标题不明确或描述性不强;我不知道具体要写什么。

我想知道是否有更好的方法来执行此操作:

bool result = variable1.innerValue.level2.innerValue == 1 || 
              variable1.innerValue.level2.innerValue == 2 || 
              variable1.innerValue.level2.innerValue == 3;

我们不能这样写:

bool result = variable1.innerValue.level2.innerValue == (1 || 2 || 3);

这将给出语法错误。

有任何想法吗?

4

6 回答 6

8

您可以使用集合作为占位符和Enumerable.Contains

if(new[]{1, 2, 3}.Contains(variable1.innerValue.level2.innerValue))
{

}

或者,为了它的价值,这个扩展:

public static bool In<T>(this T source, params T[] list)
{
  if(null==source) throw new ArgumentNullException("source");
  return list.Contains(source);
}

这使您可以编写:

if(variable1.innerValue.level2.innerValue.In(1, 2, 3))
{

}

你最喜欢的 C# 扩展方法是什么?(codeplex.com/extensionoverflow)

于 2012-09-11T12:29:07.863 回答
1

在这种情况下。你可以做到Enumerable.Range(1, 3).Contains(variable1.innerValue.level2.innerValue)

于 2012-09-11T12:29:39.690 回答
1
using System.Linq;
...
bool result = new[] {1, 2, 3}.Contains(variable1.innerValue.level2.innerValue);
于 2012-09-11T12:29:44.907 回答
1
var listToCheck = new int[]{1,2,3};
var innerValue = variable1.innerValue.level2.innerValue;

bool result = listToCheck.Contains(innerValue);
于 2012-09-11T12:30:22.113 回答
1

老实说,我首先想到的是旧的Introduce Explaining Variable重构,它不仅减少了重复,而且使您的代码更加不言自明:

var innerValue = variable1.innerValue.level2.innerValue;
bool result = innerValue == 1 || innerValue == 2 || innerValue == 3;
于 2012-09-11T12:31:19.120 回答
0

怎么样

(new List<int>(){1,2,3}).Exists(i=>i == variable1.innerValue.level2.innerValue)
于 2012-09-11T12:29:32.910 回答