为什么从字典打印时会得到namespace.object的输出?
这是我的数据对象。
namespace MoleCalculator
{
public class elementDO
{
public int AtomicNumber { get; set; }
public string Symbol { get; set; }
public string Name { get; set; }
public decimal AtomicWeight { get; set; }
}
}
这是包含我的词典的类
namespace MoleCalculator
{
public class elementDictionary
{
public Dictionary<int, elementDO> periodic_Table = new Dictionary<int, elementDO>()
{
{1,new elementDO{AtomicNumber = 1,Symbol = "H",Name = "Hydrogen", AtomicWeight = 1.007825M}},
这就是驱动它的原因
var elements = new elementDictionary().periodic_Table;
Console.WriteLine(elements[1]);
答案 0 :(得分:7)
您需要覆盖ToString,因为默认实现只返回命名空间和类名。我已经为您提供了一个如何在此处覆盖ToString
的示例:
public class elementDO
{
public int AtomicNumber { get; set; }
public string Symbol { get; set; }
public string Name { get; set; }
public decimal AtomicWeight { get; set; }
public override string ToString()
{
return $"AtomicNumber: {AtomicNumber}. Symbol: {Symbol}. Name: {Name}. AtomicWeight: {AtomicNumber}";
}
}
您的代码与上述ToString
的实现一起将提供输出:
AtomicNumber: 1. Symbol: H. Name: Hydrogen. AtomicWeight: 1
答案 1 :(得分:2)
根据评论建议,当您创建自定义类时,应覆盖默认的ToString()方法。
// I would change the class name to ElementDO in order to be consist with .NET Naming Conventions
public class elementDO
{
public int AtomicNumber { get; set; }
public string Symbol { get; set; }
public string Name { get; set; }
public decimal AtomicWeight { get; set; }
public override string ToString()
{
return string.Format("{0}:{1}:{2}:{3}", AtomicNumber, Symbol, AtomicWeight, Name);
}
}
答案 2 :(得分:2)
对于初学者来说,投票支持这个问题的人应该被枪杀。这是一个很棒的问题。
答案在于您从Console.WriteLine()语句中暗示的内容。这个方法需要一个字符串。该方法从元素[1]推断出平均值[1] .ToString()&#34;。由于您没有覆盖object.ToString()方法,因此您可以获得默认输出 - 一个相当无意义的命名空间和对象名称。
这个问题确实有两个答案。如建议的那样,您可以在对象中提供覆盖以为其提供默认输出。另一个选项是更具体地发送给Console.WriteLine()的内容,例如:
Console.WriteLine(string.Format("{0} ({1}), elements[1].Name, elements[1].Symbol));
控制台输出如下所示:
氢(H)