C#错误:operator'!='不能应用于'char'和'string'类型的操作数

时间:2013-03-02 09:07:47

标签: c# string char operators

今天,按照书中的教程(字面意思),我收到了一个意想不到的错误:

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...)

那么,问题是你将如何解决这个错误?

7 个答案:

答案 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)

虽然middleNamestring,但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(". ");
}

问题是代码试图将charstring

进行比较

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))