写这个if语句的任何更简单的方法?
if (value==1 || value==2)
例如......在SQL中你可以说where value in (1,2)
而不是where value=1 or value=2
.
我正在寻找适用于任何基本类型的东西...... string,int等.
Amr*_*mry 129
怎么样:
if (new[] {1, 2}.Contains(value))
Run Code Online (Sandbox Code Playgroud)
虽然这是一个黑客:)
或者,如果您不介意创建自己的扩展方法,则可以创建以下内容:
public static bool In<T>(this T obj, params T[] args)
{
return args.Contains(obj);
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样使用它:
if (1.In(1, 2))
Run Code Online (Sandbox Code Playgroud)
:)
Pao*_*sco 36
一种更复杂的方式:)模拟SQL的'IN':
public static class Ext {
public static bool In<T>(this T t,params T[] values){
foreach (T value in values) {
if (t.Equals(value)) {
return true;
}
}
return false;
}
}
if (value.In(1,2)) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是采用标准方式,它更具可读性.
编辑:根据@Kobi的建议,一个更好的解决方案:
public static class Ext {
public static bool In<T>(this T t,params T[] values){
return values.Contains(t);
}
}
Run Code Online (Sandbox Code Playgroud)
Hom*_*mam 25
这是你想要的 ?
if (new int[] { 1, 2, 3, 4, 5 }.Contains(value))
Run Code Online (Sandbox Code Playgroud)
或者,如果将来测试1或2以外的值,这将为您提供更大的灵活性,即使用switch语句
switch(value)
{
case 1:
case 2:
return true;
default:
return false
}
Run Code Online (Sandbox Code Playgroud)
C# 9 直接支持:
if (value is 1 or 2)
Run Code Online (Sandbox Code Playgroud)
然而,在许多情况下:switch
可能更清晰(尤其是在最近的switch
语法增强中)。你可以在这里看到这一点,if (value is 1 or 2)
编译与if (value == 1 || value == 2)
.
如果在长列表中多次搜索固定值列表中的值,则应使用HashSet <T>.如果列表非常短(<~20个项目),则基于此测试HashSet与List性能,List可以具有更好的 性能
HashSet<int> nums = new HashSet<int> { 1, 2, 3, 4, 5 };
// ....
if (nums.Contains(value))
Run Code Online (Sandbox Code Playgroud)