【问题标题】:How to compare Chars in C# short way如何在 C# 短方式中比较字符
【发布时间】:2017-06-26 15:02:21
【问题描述】:

我想知道是否有一种简单的方法可以将一个字符与多个字符进行比较。 在我的代码中,我读取了是或否 [Y/N] 的键,然后我将检查 Char 是“Y”还是“N”。

这是漫漫长路:

if(myChar == 'n' || myChar == 'y')
{
....

试过了(没用):

if(myChar == ('n'|'y'))
{
.....

有人可以帮忙吗?

【问题讨论】:

  • 我的意思是,如果它只是两个表达式,我不明白你为什么需要任何简写。另一种方法是拥有一组“允许的字符”并执行Contains(),但这对于这样的事情来说似乎有点过分了。
  • 在这种情况下,长路是最好的路,imo。

标签: c# char comparison character


【解决方案1】:

尝试查看集合

HashSet<char> valid = new HashSet<char>() {
  'y', 'n', 'N', 'Y',
};

...

if (valid.Contains(myChar)) {
  ...
}

【讨论】:

  • 为什么不只是一个字符串而不是一个哈希集?
  • @Kenneth K.: 非常正确,if ("nNyY".Contains(myChar)){...}` 是可能的,但我更喜欢 HashSet&lt;char&gt; 因为它的可读性(我们有一系列有效个字符;如果我们想添加,请说T t,我们知道该怎么做)
  • @GiladGreen 同意,但 4 个字符的 O(1) 不会有太大影响。
  • @Sean Stayn:应该是if ("ny".Contains(char.ToLower(myChar))) {...}
  • @DmitryBychenko 实际上,如果你想正确的话应该是if ("ny".Contains(char.ToLowerInvariant(myChar)))
【解决方案2】:

当字符列表很短时,使用stringContains方法:

if ("yn".Contains(myChar)) {
    ...
}

【讨论】:

  • 注意,这将是区分大小写的比较。您需要使用"YyNn".Contains(myChar) 或使用"yn".IndexOf(myChar, StringComparison.OrdinalIgnoreCase) &gt;= 0)
  • @ScottChamberlain 这是绝对正确的,如果 OP 需要不区分大小写的比较,他将需要执行您描述的方法之一。
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 2011-08-12
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多