【问题标题】:Why am I getting the opposite of what is true in List<Char>.Contains(char)为什么我得到的与 List<Char>.Contains(char) 中的情况相反
【发布时间】:2015-07-18 13:41:12
【问题描述】:

我已经在两个应用程序中对此进行了测试;我传入一个寻找特殊字符的字符。

        static void Main(string[] args)
        {
            ConsoleKeyInfo entered = Console.ReadKey();
            char asChar = Convert.ToChar(entered.KeyChar);
            Console.WriteLine(IsSpecialChar(asChar));

            Console.ReadKey();
        }

        private static string IsSpecialChar(char dWord)
        {
            List<char> Special = new List<char>();

            System.Globalization.NumberStyles hexer = System.Globalization.NumberStyles.HexNumber;
            Special.AddRange(Enumerable.Range((int.Parse("21", hexer)), int.Parse("2f", hexer)).Select(x => Convert.ToChar(x)));
            Special.AddRange(Enumerable.Range((int.Parse("3a", hexer)), int.Parse("40", hexer)).Select(x => Convert.ToChar(x)));
            Special.AddRange(Enumerable.Range((int.Parse("5c", hexer)), int.Parse("60", hexer)).Select(x => Convert.ToChar(x)));
            Special.AddRange(Enumerable.Range((int.Parse("7e", hexer)), int.Parse("7e", hexer)).Select(x => Convert.ToChar(x)));

            if (Special.Contains(Convert.ToChar(dWord)))
            {
                return "Special";
            }
            else return "NA";
        }

出于某种原因,Special.Contains 总是看到与事实相反的东西。

一些填充的字符是:

U+003F  ?   3f  QUESTION MARK
U+0040  @   40  COMMERCIAL AT
U+0041  A   41  LATIN CAPITAL LETTER A
U+0042  B   42  LATIN CAPITAL LETTER B

字母 A 和 B 不应该在那里。怎么回事?

【问题讨论】:

  • 按照 Servy 的要求进行必要的更改:ideone.com/WyCBbI
  • 谢谢,@xanatos,我一读到 Servy 的回答,就发现这是一个巨大的手掌,需要 2 秒的时间来修复!像这样的日子,我不敢相信我这样做了
  • 下一次,在if上断点,然后你看看Special,你会发现那里的项目太多了。

标签: c# linq list char utf


【解决方案1】:

Enumerable.Range 接受范围的开始和范围的长度,而不是范围的开始和范围的结束

因此,您的范围根本不是您想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-14
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 2012-09-27
    • 2022-01-03
    • 2020-09-29
    相关资源
    最近更新 更多