C# 我收到一个错误:运算符'==';无法应用于类型为';字符串';和';char';
错误在w=''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 ==
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(" ")