26

さて、私はこのプログラムを C# プログラミングの本 (ここで学ぼうとしています) の練習問題から書きまし

私はこれを正しく行いましたか?それとも、コンパイルはできるが何もしないコードを書くことに成功したのでしょうか。ToStringの目的は何ですか?

私はこれに関する他の投稿を見て約30分を費やしましたが、それを理解していなかったので、これを作ることにしました.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication297
{
class Program
{
    static void Main(string[] args)
    {
        String name = "Stormtrooper";
        Employee s = new Employee(name);
        Console.WriteLine("The type of hire is a {0}", s.Name);
        Console.WriteLine("The identification number is {0}", s.Number);
        Console.WriteLine("The date of hire is {0} ABY", s.Date);
        Console.WriteLine("The standard galactic salary is...{0:C}", s.Salary);

    }

    class Employee
    {
        private string _name;
        private string _number;
        private int _date;
        private int _salary;
        public string Name
        {
            get
            {
                return _name;
            }
        }

        public string Number
        {
            get
            {
                return _number;
            }
        }

        public int Date
        {
            get
            {
                return _date;
            }
        }
        public int Salary
        {
            get
            {
                return _salary;
            }
        }
        public Employee(string n)
        {
            _name = n;
            _number = "AA23TK421";
            _date = 4;
            _salary = 800;
        }
    }

    public override string ToString()

    {
        return "_name + _number + _date + _salary".ToString();
    }
}
}
4

7 に答える 7

60

というフレーズだけを表す文字列を返しています_name + _number + _date + _salary

おそらくあなたがやりたかったことは、これらのフィールドを使用して文字列を作成することです。それらをすべて一緒につぶしたい場合は、連結が機能しますが、非常に読みにくくなります

public override string ToString()
{
    return String.Concat(_name, _number, _date, _salary);
}

ただし、Formatを使用し、値にラベルを含めることをお勧めします

public override string ToString()
{
    return String.Format("Name:{0}, Number:{1}, Date:{2}, Salary:{3}",_name, _number, _date, _salary);
}

C# 6 以降を使用している場合は、次のよりクリーンな形式を使用できます

public override string ToString()
{
    return $"Name:{_name}, Number:{_number}, Date:{_date}, Salary:{_salary}";
}

String.Formatこれは、以前のバージョンとまったく同じロジックです。

于 2013-08-13T04:05:29.877 に答える
2

むしろ次のようなものを試してください

public override string ToString()
{
    return String.Format("Name : {0}, number {1}, date {2}, salary {3}",_name,_number,_date,_salary);
}

しかし、それはクラスの一部である必要があります

それで

class Employee
{
    private string _name;
    private string _number;
    private int _date;
    private int _salary;

    .....

    public override string ToString()
    {
        return String.Format("Name : {0}, number {1}, date {2}, salary {3}",_name,_number,_date,_salary);
    }
}

String.Format メソッドをご覧ください

指定された文字列内の各書式項目を、対応するオブジェクトの値に相当するテキストに置き換えます。

于 2013-08-13T04:03:52.480 に答える
2

C# 6 (またはそれ以降) を使用しているnameof()場合、プロパティ名が変更された場合に備えて、文字列内のプロパティ名に メソッドを使用します。$""の代わりにの表記を使用することもできますstring.Format()

例えば:

public override string ToString()
{
    return $"{nameof(Name)}: {_name}";
}
于 2016-11-02T15:59:38.847 に答える
0

出力を適切な形式でフォーマットすることを試みることができます。(ただし、テストされていません)

public override string ToString()
{
    return string.Format("Name: {0} Number: {1:n0} Date: {2:yyyy-MM-dd} Salary: {3:n2}", _name, _number, _date, _salary);
}

コンテキストに応じて、.ToString() を上書きする目的はたくさんあります。例えば、

  • 一部の開発者は、デバッグを行うときにオブジェクトの説明を適切にフォーマットすることを好みます。
  • 一部の開発者は、いくつかのシリアル化コードを ToString() メソッドに入れることを好みます。
  • 一部の開発者は、.ToString() メソッドにデバッグ コードを挿入することさえありますが、これは良い方法ではないかもしれません。

それは本当にあなたのニーズの文脈に依存します。従うべき良い方法がオンラインで見つかるかもしれません。オンラインにはたくさんのリソースがあると信じてください。

于 2013-08-13T04:12:27.820 に答える