首先,如果标题不清晰或不描述性,请道歉;我不知道该写什么。
我想知道是否有更好的方法来做这个操作:
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);
这将导致语法错误。
有什么想法吗?
您可以使用集合作为占位符和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)
在这种情况下。你可以做Enumerable.Range(1, 3).Contains(variable1.innerValue.level2.innerValue)
。
using System.Linq;
...
bool result = new[] {1, 2, 3}.Contains(variable1.innerValue.level2.innerValue);
var listToCheck = new int[]{1,2,3};
var innerValue = variable1.innerValue.level2.innerValue;
bool result = listToCheck.Contains(innerValue);
老实说,我脑海中浮现的第一件事是古老的Introduct Explaining Variable重构,它不仅减少了重复,而且使代码更易于解释:
var innerValue = variable1.innerValue.level2.innerValue;
bool result = innerValue == 1 || innerValue == 2 || innerValue == 3;
怎么样
(new List<int>(){1,2,3}).Exists(i=>i == variable1.innerValue.level2.innerValue)