有没有更短的写 x == y OR x == z 的方法? [复制]

Posted

技术标签:

【中文标题】有没有更短的写 x == y OR x == z 的方法? [复制]【英文标题】:Is there a shorter way of writing x == y OR x == z? [duplicate] 【发布时间】:2016-03-23 05:35:35 【问题描述】:

C# 中有什么方法可以缩短这个时间吗?

例如,你会如何缩短这个:

bool a = x == "YES" || x == "NO"

我正在编写的代码:

public static bool isYESNO(string x)

        return x == "YES" || x == "NO";

【问题讨论】:

你的方法已经很短了,除非你有OR的10个项目,就是这样...... 我会这样写:bool a = (x == "YES" || x == "NO");IMO 它更具可读性,因为您可以立即看到条件和任务。 我真的不明白你的方法有什么问题。在某些时候,试图使代码更紧凑最终会导致代码难以阅读,有时甚至会降低性能。您应该尝试在图灵机上编写此函数并计算您的幸运星,它在 C# 中是如此清晰和简洁。 嗯,更短并不意味着更好。所有发布的答案都会导致额外的内存分配,这不是一个好的方法,而且在更糟糕的情况下,它们比初始代码更难看。 @Sky 很高兴你不需要使用 VB6,然后:-) 【参考方案1】:

你可以写扩展方法:

public static class Extensions

    public static bool In<T>(this T item, params T[] items)
    
         return items.Contains(item);
    

然后像这样使用它:

var x = "YES";
bool a = x.In("YES", "NO");
Console.WriteLine(a);

如果你只有几个项目,这可能不是很有帮助,但如果你有很多项目,它会使语法更短:

bool a = x.In("YES", "NO", "TRUE", "FALSE", "SOME OTHER VALUE");

【讨论】:

我最喜欢这个答案。 谢谢,这是一个更通用的案例,可以在需要时轻松应用于其他事情。【参考方案2】:

你可以试试

if (new[] "YES", "NO".Contains(x))

当您有多个值要检查 OR 条件时,这可能很有用。类似的东西

if (new[] "YES", "NO", "value1", "value2", "value3", "value4".Contains(x))

在您目前的情况下,您的做法非常易读且简短。

【讨论】:

您缺少... @ZoharPeled:- 谢谢。更新了。 虽然不完全相同。您的代码每次都会导致额外的内存分配,这不是一个好的做法。【参考方案3】:

假设您只想检查两个项目,如示例中所示,我认为您的方法已经很短了。但是,如果您有很多项目(比如 10 个项目)要检查,请考虑使用LINQ Contains 进行比较:

string[] correctItems = new string[]  "YES", "NO", "bla1", "bla2", "bla3", "bla4", "bla5", "bla6", "bla7", "bla8" ;
bool a = correctItems.Contains(x);

【讨论】:

以上是关于有没有更短的写 x == y OR x == z 的方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

PHP 变量

根据较长列表的顺序对短列表进行排序

forge 查看器中 nwc 文件的对象的 x、y、z 坐标

三个正数 x、y、z 的组合,使得 x + y、x - y、y + z、y - z、x + z 和 x - z 是完全平方

THREE.js如何实现在x,y,z轴上的拖拽

1.若X,Y,Z都定义是INT类型且初值为0,则以下不正确的赋值语句是 A,X+Y=Z+10; B,X+=Y+2; C.Z++; D.X+Y+Z