C# 使用多个或'简化if语句;它涉及同一个变量?
假设我有这样一个if语句:C# 使用多个或'简化if语句;它涉及同一个变量?,c#,C#,假设我有这样一个if语句: if (a > x || b > x || c > x || d > x) {} 假设它总是涉及相同的重复变量(在本例中为x)和相同的操作,但所有使用之间的操作并不相同。例如,另一个if语句可能使用: if (x.Contains(a) || x.Contains(b) || x.Contains(c) || x.Contains(d)) {} 有没有一种方法可以简化C#中的if语句,这样我们就不会反复输入相同的内容?我不希望为这个实例调用
if (a > x || b > x || c > x || d > x) {}
假设它总是涉及相同的重复变量(在本例中为x)和相同的操作,但所有使用之间的操作并不相同。例如,另一个if语句可能使用:
if (x.Contains(a) || x.Contains(b) || x.Contains(c) || x.Contains(d)) {}
有没有一种方法可以简化C#中的if语句,这样我们就不会反复输入相同的内容?我不希望为这个实例调用额外的函数。您可以使用LINQ,但如果您只有四个条件,它认为它不是很有用:
if (new[] {a,b,c,d}.Any(current => current > x))
及
您可以使用Linq的方法将多个条件一起|
var tests = new int[] { a, b, c, d };
if (tests.Any(y => y > x)) { }
if (tests.Any(y => x.Contains(y))) { }
顺便说一下,如果您需要将多个条件&&
-ed放在一起,您可以使用
没有什么能阻止你自己扩展,让事情变得更清楚
public static class LinqExtension
{
public static bool ContainsAny<TInput>(this IEnumerable<TInput> @this, IList<TInput> items)
{
return @this.Any(items.Contains);
}
}
公共静态类LinqExtension
{
公共静态bool ContainsAny(this IEnumerable@this,IList项)
{
返回@this.Any(items.Contains);
}
}
不,没有出路……逻辑就是这样工作的……我在想,可能会有一些可枚举的接口,需要一个操作来对所有元素或类似的东西进行比较。哦,还有“不使用函数调用”-我不是说你的解决方案不能使用lambdas或其他在后台调用函数的技术-我只是不想在我的代码中为此编写单独的函数。同意。在可读性方面,使用LINQ肯定会有一些损失。因此,当必须评估少量条件时,我认为if..or..
语法是更合适的选择。当您的逻辑变得过于繁琐而无法阅读时,请尝试LINQ实现;事实上,我们确实有超过4个,但我仍然同意这可能不是最好的方式:)谢谢你的解决方案/意见。
if (tests.All(y => y > x)) { }
if (tests.All(y => x.Contains(y))) { }
public static class LinqExtension
{
public static bool ContainsAny<TInput>(this IEnumerable<TInput> @this, IList<TInput> items)
{
return @this.Any(items.Contains);
}
}