2

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

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

那么,问题是您将如何解决此错误?

4

7 回答 7

10

那么,问题是您将如何解决此错误?

这取决于您要达到的目标。让我们看看有问题的行:

if (middleName[0] != "")

你真的想在这里确定什么?询问middleNamemiddleName[0]返回的内容)的第一个字符是否是空字符串是没有意义的。如果您一直在检查它是否等于“X”(或其他单字符串),那么我可能认为您想要if (middleName.StartsWith(...)).

但是,如果您实际上只是想找出是否middleName不为空,则可以使用:

if (middleName != "")

或者如果middleName也可以为 null 并且您想要检测它,您可能想要:

if (!string.IsNullOrEmpty(middleName))

事实上,如果middleName是空的,那么middleName[0]会抛出一个IndexOutOfRangeException.

作为一个附带问题 - 除非这真的是一次性的,否则它建议你应该找一本不同的书。虽然错误可能会漏掉,但你真的,真的应该能够期望书中的代码能够编译(除非它试图证明失败)。您可能想要编辑您的问题以命名和羞辱有问题的书:)(它在 C# 中使用方法名称displayFullName和变量名称的事实FullName也有点诅咒。)

于 2013-03-02T09:10:36.253 回答
3

虽然middleNamestringmiddleName[0]但不是:它是 的单个字符middleName,它的初始字符。您不能将其与空字符串进行比较,但可以比较整个中间名,如下所示:

if (middleName != "")

查看字符串是否为空的更好方法是使用for 它的IsNullOrEmpty方法:System.String

if (!string.IsNullOrEmpty(middleName))
于 2013-03-02T09:10:41.747 回答
1

使用 middleName[0] 您将获得该字符串的第一个字符,因此是一个字符。

如果要比较字符串的第一个字符,请使用:

middleName[0] != ''

如果要比较完整的字符串,则:

middleName != ""
于 2013-03-02T09:10:53.607 回答
1

代码应该是这样的:

if (middleName[0] != ' ')
{
    FullName.Append(middleName[0]);
    FullName.Append(". ");
}

甚至更好(假设这是代码的目的):

if (!String.IsNullOrWhiteSpace(middleName))
{
    FullName.Append(middleName[0]);
    FullName.Append(". ");
}

问题是代码试图将 achar与 a进行比较string

middleName[0]是类型char

""是类型string

于 2013-03-02T09:11:16.540 回答
1

middleName 被声明为字符串,这是真的。但是字符串由字符组成。您正在尝试访问字符串的第一个元素,即 char。所以只需将其更改为

middleName != ""

或者

middleName[0] != 'a'

如果您只想检查第一个字符

于 2013-03-02T09:12:11.063 回答
1

您正在尝试将一个字符(它总是一些东西,任何符号并且不能为空)与一个空字符串(不包含字符)进行比较。改用String.IsNullOrEmpty

if(!String.IsNullOrEmpty(middleName[0]))

如果你想检查你的 middleName 是否为空

于 2013-03-02T09:13:02.250 回答
-1

看来是书上的代码错误,

无论如何,当我将其更改为:

if( middleName != "" )

代码完美无缺。

或者,为了额外检查 middleName 是否为 NULL(如果之前的程序逻辑跳过检查),解决方案可能是:

if (!string.IsNullOrEmpty(middleName))
于 2013-03-02T09:30:52.883 回答