有没有其他方式来写这样的东西:
if (a == x || a == y || a == z)
Run Code Online (Sandbox Code Playgroud)
我找到的一种方法是这样做:
if( new [] {x,y,z}.Contains(a))
Run Code Online (Sandbox Code Playgroud)
还有其他好方法吗?
Dav*_*und 64
我经常使用模仿SQL的扩展方法IN:
public static bool IsIn<T>(this T obj, params T[] collection) {
return collection.Contains(obj);
}
Run Code Online (Sandbox Code Playgroud)
这样我就能做到
if(a.IsIn(b, c, d)) { ... }
Run Code Online (Sandbox Code Playgroud)
Mon*_*ong 12
你有经典的switch语句:
switch(a) {
case x:
case y:
case z:
// Do stuff
break;
}
Run Code Online (Sandbox Code Playgroud)
纯娱乐:
using System;
static class Program {
static bool In(this object obj, params object[] values) {
foreach (object value in values) {
if (obj.Equals(value)) {
return true;
}
}
return false;
}
static void Main(string[] args) {
bool test1 = 3.In(1, 2, 3);
bool test2 = 5.In(1, 2, 3);
}
}
Run Code Online (Sandbox Code Playgroud)
但我真的认为最好的方法是写普通支票
if(a == x || a == y || a == z)
Run Code Online (Sandbox Code Playgroud)
每个人都会立即明白它的作用.
你重写它的解决方案
if( new [] {x,y,z}.Contains(a))
Run Code Online (Sandbox Code Playgroud)
这不是一个好举措.
您需要采用一种简单有效的逻辑运算,每个程序员都能轻松理解并且包含短路逻辑以加快速度,而您生成的代码需要一点时间才能理解,哪些效率要低得多.
如果你不尝试"聪明",有时候你的同事会喜欢它!
考虑一种情况,其中a == x,y和z是评估速度慢,功能昂贵的函数.
if(a == x || a == y || a == z)你有短路操作员的好处||,那么y和z将不会被评估.new[] { x, y, z }- Ÿ和ž将被评估每一次. .Contains()如果有一个优雅的语法来创建延迟评估的sequence(IEnumerable<T>),那么'技巧' 会更有用.即类似yield return x; yield return y;...,但内联和更短.
| 归档时间: |
|
| 查看次数: |
10768 次 |
| 最近记录: |