Override .ToString method c#

后端 未结 7 1940
北海茫月
北海茫月 2020-11-27 07:52

Okay, so I wrote this program out of the exercise of a C# programming book (I\'m trying to learn here) and it asks for \"Override the ToString() method to return all

相关标签:
7条回答
  • 2020-11-27 07:57

    If you are using C# 6 (or later) use the nameof() method for the property names in the string in case the property names change. You can also use the $"" notation instead of using string.Format().

    For example:

    public override string ToString()
    {
        return $"{nameof(Name)}: {_name}";
    }
    
    0 讨论(0)
  • 2020-11-27 08:04
    class Program
    {
        static void Main( )
        {
            int Number = 10;
            Console.WriteLine(Number.ToString());
    
            Customer cc = new Customer();
            cc.FirstName = "Rakibuz";
            cc.LastName = "Sultan";
    
            Console.WriteLine(Convert.ToString(cc));
    
        }
    }
    
    public class Customer
    {
        public string FirstName;
        public string LastName;
    
        public override string ToString()
        {
            return FirstName + " " + LastName;
        }
    
    }
    
    0 讨论(0)
  • You could try to format the output in a nice format. (not tested, though)

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

    there are a lot of purposes overwriting .ToString(), depending on the context. for example,

    • some developers like to have nicely formatted object description when doing debug, overwriting .ToString() would allow them to have meaningful description with some identifier (for example, the Id of a object);
    • Some developers like to put some serialization code into the ToString() method;
    • Some developers even put some debug code into the .ToString() method, though it might not be a good practice.

    it really depending on the context of your needs. you may find some good practices to follow online - believe there are plenty of resources online.

    0 讨论(0)
  • 2020-11-27 08:10

    You are returning a string that just says the phrase _name + _number + _date + _salary.

    What you likely wanted to do is build a string using those fields. If you wanted them all mushed together Concat would work, but it would be highly un-readable

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

    However what would be better is to use Format and include labels with the values

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

    If you are using C# 6 or newer you can use the following cleaner format

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

    Which is the exact same logic as the previous String.Format version.

    0 讨论(0)
  • 2020-11-27 08:12

    Rather try something like

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

    But it neads to be part of the class

    so

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

    Have a look at String.Format Method

    Replaces each format item in a specified string with the text equivalent of a corresponding object's value.

    0 讨论(0)
  • 2020-11-27 08:17

    The reason people override the ToString() method is to have a default string representation of your object, usually for display to the user or in a log or console, like this:

    Console.WriteLine(yourClassObject);
    

    If you do not override the ToString(), then its default implementation is to return the fully qualified name of your object, like this:

    YourNamespace.YourClassName
    

    By changing the inherited implementation (from System.Object), then you can make a nicer (read: prettier) representation, like this:

    public override string ToString()
    {
        return String.Format("This instance of my object has the following: Name = {0}, Number = {1}, Date = {2}, Salary = ${3}", _name, _number, _date, _salary);
    }
    
    0 讨论(0)
提交回复
热议问题