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」(または他の1文字の文字列)に等しいかどうかをチェックしていたなら、私はあなたが欲しいと思ったかもしれませんif (middleName.StartsWith(...))

ただし、実際に空でないかどうかを調べようとしている場合middleNameは、次を使用できます。

if (middleName != "")

または、middleNamenullになる可能性があり、それを検出したい場合は、次のようにします。

if (!string.IsNullOrEmpty(middleName))

実際、middleNameが空の場合は、middleName[0]をスローしIndexOutOfRangeExceptionます。

副次的な問題として-これが本当に一回限りのものでない限り、それはあなたが別の本を見つけるべきであることを示唆しています。間違いはすり抜けることができますが、実際には、本のコードがコンパイルされることを期待できるはずです(失敗を実証しようとしている場合を除く)。質問を編集して、問題の本に名前を付けて恥をかかせたいと思うかもしれません:)(C#でメソッド名displayFullNameと変数名を使用しているという事実FullNameもやや気の毒です。)

于 2013-03-02T09:10:36.253 に答える
3

middleNameですが、そうstringではありません。最初の文字である、middleName[0]からの1文字です。middleName空の文字列と比較することはできませんが、次のようにミドルネーム全体を比較することはできます。

if (middleName != "")

文字列が空であるかどうかを確認するためのより良い方法は、そのためのIsNullOrEmptyメソッドを使用するSystem.Stringことです。

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

MiddleName [0]を使用すると、その文字列の最初の文字、つまりcharを取得できます。

文字列の最初の文字を比較する場合は、次を使用します。

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(". ");
}

問題は、コードがaとを比較しようとしていcharたことですstring

middleName[0]タイプですchar

""タイプですstring

于 2013-03-02T09:11:16.540 に答える
1

ミドルネームは文字列として宣言されています、それは本当です。ただし、文字列は文字で構成されます。文字列の最初の要素であるcharにアクセスしようとしています。だから単にそれをに変更します

middleName != ""

また

middleName[0] != 'a'

最初の文字だけをチェックしたい場合

于 2013-03-02T09:12:11.063 に答える
1

char(常に何か、任意の記号であり、空にすることはできません)を空の文字列(charを含まない)と比較しようとしています。代わりにString.IsNullOrEmptyを使用してください。

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

ミドルネームが空でないことを確認したい場合

于 2013-03-02T09:13:02.250 に答える