Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找范围内的值=c#中是否有这样的代码关键字?_C#_.net - Fatal编程技术网

查找范围内的值=c#中是否有这样的代码关键字?

查找范围内的值=c#中是否有这样的代码关键字?,c#,.net,C#,.net,在很多情况下,我们必须这样做: if (someVariable == value1 || someVariable == value2 || someVariable == value1...) 如果我们能以以下方式完成这项工作,那将是一件好事: if (someVariable in {value1, value2, value3...} 我们可以做到 int[] arr = {value1, value2, value3....}; if (arr.Contains(someVaria

在很多情况下,我们必须这样做:

if (someVariable == value1 || someVariable == value2 || someVariable == value1...)
如果我们能以以下方式完成这项工作,那将是一件好事:

if (someVariable in {value1, value2, value3...}
我们可以做到

int[] arr = {value1, value2, value3....};
if (arr.Contains(someVariable)) ...
但在我看来,这仍然是压倒性的。为什么没有对这种语法的支持,或者有,但我不知道?

使用的方法。我不确定这是如何提高代码清晰度的,因为您仍然必须检查这三个条件。

如何

switch (someVariable)
{
    case value1:
    case value2:
    case value3:
    case value12345:
        doSomething();
        break;
    default:
        doSomethingElse();
        break;
}

为此使用哈希集:

var hs = new HashSet<int>();
hs.Add(1);
hs.Add(2);
...
if(hs.Contains(x))
{
   //bingo!
}
var hs=new HashSet();
hs.增加(1);
hs.增加(2);
...
如果(hs.包含(x))
{
//宾果!
}

我认为这可能是您可能得到的最简洁的内容:

if (new int[] { 1, 2, 3 }.Contains(2))
{
    Console.WriteLine("bleh");
}

为什么会被否决?这是对问题中建议的阵列方法的改进。-1非常苛刻。所以+1。顺便说一句,paul,为什么你不能使用一个简单的泛型列表并使用
.Contains
?@phoog我猜:问题在于语法而不是性能<当您必须在larg4e集合中查找值时,code>HashSet非常有用,但OP似乎只有几个可能的值。随着
HashSet
a语法变得更加复杂,这与要求的相反。@对于大量元素,HashSet在确定它是否包含给定项时更加有效。列表执行线性搜索,这是O(n),而不是散列查找的O(1)。HashSet在这种情况下可能更简单。@Piotraugscik我同意你的分析,但我注意到HashSet也可以与集合初始值设定项语法一起使用。不,值必须是常量,大多数情况下都不是这样。我不知道我怎么会认为这不可能,我确信我已经尝试过了。:)这是最接近我所期望的,尽管如果微软能在框架中添加它会很好,所以我们可以只做{1,2,3}.Contains(2)。