C#:使用 ToString() 方法打印 POCO class 的全限定名而不影响任何两个字符串属性的串联

C#: Print POCO class's full qualified name without affect concatenation of any two string properties with the use of ToString() method

当我调用 class 对象的 ToString() 方法时,我有一个场景可以打印 Student class 的学生(名字和姓氏)名称如下所示。

Console.WriteLine(new Student() { FirstName = "Sachin", LastName = "Tendulkar" }.ToString());

所以,我有 overrride Student's POCO class 中的 ToString() 方法,如下所示

namespace TestSOF_Console
{
    public class Student
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string StudentCode { get; set; }
        public override string ToString()
        {
            return string.Format("{0} {1}", FirstName, LastName);
        }
    }
}

稍后,我有一个额外的查询来获取 Student class 的完整限定名称作为 TestSOF_Console.Student,而不影响使用 ToString() 方法的学生全名。

Console.WriteLine(new Student() { FirstName = "Sachin", LastName = "Tendulkar" }.ToString());

上面的代码将允许我选择我需要打印的内容(无论是 class 姓名还是学生姓名)...

有没有可能用ToString()方法实现这两个目标?

在第一个大括号之前的引号内添加您想要的任何文字字符串,("TestSOF_Console.Student - {0} {1}", FirstName, LastName)

如果您需要使其成为可选的,只需重载 ToString() 方法即可:

public override string ToString()
{
    return string.Format("{0} {1}", FirstName, LastName);
}

public string ToString(string header)
{
    return string.Format(header + " - {0} {1}", FirstName, LastName);
}

要调用重载,只需将字符串作为参数添加到 ToString() 方法中 -

new Student() { FirstName = "Sachin", LastName = "Tendulkar" }.ToString("TestSOF_Console.Student")

不,您可以改为调用 GetType 方法。

在覆盖 .ToString() 方法之前,产生的值应该是 TestSOF_Console.Student,所以我假设当您要求完整的限定名称时,这就是您的意思。

要获得该值,只需输出 typeof(TestSOF_Console.Student).FullName

所以,要想做你想做的事,你只需要这样写:

Console.WriteLine(typeof(TestSOF_Console.Student).FullName + " " + new Student() { FirstName = "Sachin", LastName = "Tendulkar" }.ToString());