(s + t) & z"; var exprCharsNoWhitespace = expression.Except( n-6ren">
gpt4 book ai didi

c# - 为什么查询结果少了一个字符?

转载 作者:可可西里 更新时间:2023-11-01 08:04:22 25 4
gpt4 key购买 nike

看一下代码:

string expression = "x & ~y -> (s + t) & z";
var exprCharsNoWhitespace = expression.Except( new[]{' ', '\t'} ).ToList();
var exprCharsNoWhitespace_2 = expression.Replace( " ", "" ).Replace( "\t", "" ).ToList();

// output for examination
Console.WriteLine( exprCharsNoWhitespace.Aggregate( "", (a,x) => a+x ) );
Console.WriteLine( exprCharsNoWhitespace_2.Aggregate( "", (a,x) => a+x ) );

// Output:
// x&~y->(s+t)z
// x&~y->(s+t)&z

我想从原始字符串中删除所有空格,然后获取单个字符。结果让我很吃惊。正如预期的那样,变量 exprCharsNoWhitespace 不包含空格,但出乎意料的是,它只包含 几乎 所有其他字符。缺少最后一次出现的“&”,列表的计数为 12。而 exprCharsNoWhitespace_2 完全符合预期:计数为 13,包含除空格以外的所有字符。

使用的框架是 .NET 4.0。我也只是将其粘贴到 csharppad(基于 Web 的 IDE/编译器)并得到了相同的结果。

为什么会这样?


编辑:好吧,正如 Ryan O'Hara 所指出的那样,我不知道 Except 是一个集合操作。我以前没有用过它。

// So I'll continue just using something like this:
expression.Where( c => c!=' ' && c!='\t' )

// or for more characters this can be shorter:
expression.Where( c => ! new[]{'a', 'b', 'c', 'd'}.Contains(c) ).

最佳答案

Except produces a set difference.你的表达式不是一个集合,所以它不是正确的使用方法。至于为什么缺少&:是因为它重复了。其他角色都不是。

关于c# - 为什么查询结果少了一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34386661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com