C# C中字典的错误输出#
为什么从字典打印时会得到namespace.object的输出 这是我的数据对象C# C中字典的错误输出#,c#,dictionary,C#,Dictionary,为什么从字典打印时会得到namespace.object的输出 这是我的数据对象 namespace MoleCalculator { public class elementDO { public int AtomicNumber { get; set; } public string Symbol { get; set; } public string Name { get; set; } public deci
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}},
您需要重写,因为默认实现只返回名称空间和类名。我在这里为您提供了一个如何覆盖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。符号:H。名称:氢。AtomicWeight:1
正如注释所建议的,在创建自定义类时,应该重写默认方法
首先,不管是谁否决了这个问题,都应该被枪毙。这是一个奇妙的问题 答案在于您从Console.WriteLine()语句中所暗示的内容。此方法接受一个字符串。该方法从元素[1]推断为“元素[1].ToString()”的意思。因为您没有重写object.ToString()方法,所以默认输出是您得到的—一个毫无意义的名称空间和对象名 这个问题有两个答案。正如建议的那样,您可以在对象中提供一个覆盖,为其提供一个默认输出。另一个选项是更具体地说明发送到Console.WriteLine()的内容,例如:
Console.WriteLine(string.Format("{0} ({1}), elements[1].Name, elements[1].Symbol));
控制台输出如下所示:
氢(H)
您必须重写
ToString
。对象的默认字符串表示形式是该对象的类型名称。NET无法知道您个人认为您的对象应该如何打印。您必须通过覆盖该对象上的.ToString()
来说明这一点。谢谢,我以前不清楚这一点,而且我在找到解决方案时遇到了很多困难。感谢您提供有关.NET命名的提示,我正在尝试完善我的实践。然后我建议您看一看:Upvote,这是一个替代解决方案的好例子!也谢谢,我很高兴知道所有可能的方法!。正如您所知,Console.WriteLine有一个字符串格式重载。
// 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);
}
}
Console.WriteLine(string.Format("{0} ({1}), elements[1].Name, elements[1].Symbol));