今天,按照书中的教程(字面意思),我收到了一个意想不到的错误:
operator '!=' cannot be applied to operands of type 'char' and 'string'
在这部分代码中:
public void displayFullName()
{
StringBuilder FullName = new StringBuilder();
FullName.Append(firstName);
FullName.Append(" ");
if (middleName[0] != "") //ERROR occurs here
{
FullName.Append(middleName[0]);
FullName.Append(". ");
}
FullName.Append(lastName);
Console.WriteLine(FullName);
}
当然,middleName声明为:
class Person
{
private string firstName;
private string middleName; //obiously declared as string
private string lastName;
private int age;
(...the rest of code...)
那么,问题是你将如何解决这个错误?
答案 0 :(得分:10)
那么,问题是你将如何解决这个错误?
这取决于你想要达到的目标。让我们来看看有问题的一行:
if (middleName[0] != "")
你真的想在这里确定什么?询问middleName
的第一个字符(这是middleName[0]
返回的)是否为空字符串是没有意义的。如果你一直在检查它是否等于“X”(或其他一些单字符串)那么我可能认为你想要if (middleName.StartsWith(...))
。
但是如果你实际只是试图找出middleName
是否为空,你可以使用:
if (middleName != "")
或者如果middleName
也可以为null并且您想要检测到它,则可能需要:
if (!string.IsNullOrEmpty(middleName))
事实上,如果middleName
为空,则middleName[0]
会抛出IndexOutOfRangeException
。
作为一个副作用 - 除非这是一次性的,否则它表明你应该找一本不同的书。虽然错误可能会漏掉,但你真的应该能够期望书中的代码能够编译(除非它试图证明失败)。你可能想编辑你的问题来命名和羞辱有问题的书:)(在C#中使用方法名displayFullName
和变量名FullName
这一事实也有些诅咒。)
答案 1 :(得分:2)
虽然middleName
是string
,但middleName[0]
却不是:它是middleName
中的一个字符,也就是其初始字符。您无法将其与空字符串进行比较,但您可以比较整个中间名称,如下所示:
if (middleName != "")
查看字符串是否为空的更好方法是使用System.String
if (!string.IsNullOrEmpty(middleName))
方法:
{{1}}
答案 2 :(得分:1)
使用middleName [0],您将获得该字符串的第一个字符,因此是一个字符。
如果要比较字符串的第一个字符,请使用:
middleName[0] != ''
如果你想比较完整的字符串,那么:
middleName != ""
答案 3 :(得分:1)
代码应该是这样的:
if (middleName[0] != ' ')
{
FullName.Append(middleName[0]);
FullName.Append(". ");
}
甚至更好(假设这是代码的意图):
if (!String.IsNullOrWhiteSpace(middleName))
{
FullName.Append(middleName[0]);
FullName.Append(". ");
}
问题是代码试图将char
与string
middleName[0]
的类型为char
""
的类型为string
答案 4 :(得分:1)
middleName声明为字符串,这是真的。但字符串由字符组成。您正在尝试访问字符串的第一个元素,即char。 所以只需将其改为
即可middleName != ""
或
middleName[0] != 'a'
如果您只想检查第一个字符
答案 5 :(得分:1)
您正在尝试使用空字符串(不包含字符)来比较字符(总是某些符号,不能为空)。 请改用String.IsNullOrEmpty:
if(!String.IsNullOrEmpty(middleName[0]))
如果你想检查你的middleName是否为空
答案 6 :(得分:-1)
似乎书中的代码是错误的,
无论如何,当我把它改为:
if( middleName != "" )
代码完美无缺。
或者,为了进一步检查middleName是否为NULL(如果先前的程序逻辑被跳过来检查),解决方法可能是:
if (!string.IsNullOrEmpty(middleName))