C# 我收到一个错误:运算符'==';无法应用于类型为';字符串';和';char';

C# 我收到一个错误:运算符'==';无法应用于类型为';字符串';和';char';,c#,C#,错误在w=''textBox1.Text.Split返回一个字符串数组,因此您的w是一个字符串。单引号用于字符,双引号用于字符串。所以应该 StringBuilder sb = new StringBuilder(); var words = textBox1.Text.Split(new char[] { ' ' }); foreach (var w in words) { if (w ==

错误在w=''

textBox1.Text.Split
返回一个字符串数组,因此您的
w
是一个字符串。单引号用于字符,双引号用于字符串。所以应该

StringBuilder sb = new StringBuilder();
            var words = textBox1.Text.Split(new char[] { ' ' });
            foreach (var w in words)
            {
                if (w == ' ')

你可能会有点困惑。在C语言中,你不能互换
。它们的意思不同。
是字符分隔符。
是字符串分隔符。char不是字符串,
var w
是字符串。您需要的是:

if (w == " ")

String.Split
返回
String
s的数组

如果foo是
字符串
,bar是
字符
,则
foo==bar
无效

而不是

StringBuilder sb = new StringBuilder();
var words = textBox1.Text.Split(new char[] { ' ' });
foreach (var w in words)
{
    if (w == " ") //do something
}
您可以使用以下选项:

(w == ' ')

如果(w==”)
。。。。。使用单引号使其成为
字符(而不是
字符串
),而且,如果您在
'
上拆分,
w==”
将永远不会为真。确切地说,为什么
var
是个坏主意@利亚姆:我不确定那是不是讽刺。你是说解决方案应该是使用
foreach(单词中的字符串w)
。。。然后观察用户是否会收到完全相同的错误消息?Hi@MarkHildreth,不,我的意思是,变量在代码中隐藏了底层数据类型,使其更难读取。这样的事情很难被发现。C#是一种强类型语言,为什么要隐藏它?对匿名类型很有用,这就是我所关心的。我很好奇,为什么你选择使用
.equals()
而不是
==
?@MikePrecup,因为如果
w
null
,他希望它抛出一个异常?另外,考虑到该方法的大小写,很明显他是一名java程序员,在java中,
==
不会因
字符串而过载。
@Servy java是我看到的常用用法(很好地理解大小写)。不过,听到其他原因总是很有趣,比如
null
,尽管我认为在这种情况下,显式检查会使意图更加清晰。@MikePrecup我实际上是在解释为什么
等于
不如
=
,当然是用讽刺的语气。如果您使用静态
字符串.Equals(a,b)
,那么它将起作用,这只是一个偏好问题。@Servy我一直坚持使用
=
,以确保可读性/一致性,但MSDN建议
使用字符串.Equals方法的重载来测试两个字符串是否相等,这对我来说一直是个困惑的问题。我仍在试图找到一个好的答案,为什么这会是首选。也许是为了确保一致性,即使使用了
StringComparison
选项?我很可能会提出这个问题,因为我看不出有什么令人信服的理由愿意这样做。
w.Equals(" ")