【问题标题】:List isn't outputting correctly列表未正确输出
【发布时间】:2014-10-29 01:23:39
【问题描述】:

我有一个正在读取数据的列表。我检查了如何输出列表,但对其他人有用的东西对我不起作用。我注意到我看到的每个例子都没有像我一样使用列表中的一个类,而且我找不到这样的例子。

这是我的代码:

private static void AddCar(Vechicle _Motor, List<Vechicle> vehicles)
      {
          //int number = 1;
          Console.Clear();

          Vechicle v = new Vechicle();
          Console.Write("/////////////////////ADDING CAR DETAILS\\\\\\\\\\\\\\\\\\\\\\\\");
          Console.Write("\n\nEnter Make: ");
          v.Make = Console.ReadLine();              
          Console.Write("\n\nEnter Model: ");
          v.Model = Console.ReadLine();              
          Console.Write("\n\nEnter Year: ");
          v.Year = Console.ReadLine();
          vehicles.Add(v);
          Console.Clear();
         foreach (Vechicle value in vehicles)
          {
              Console.WriteLine(vehicles);
          }


      }

这是输出:

感谢您的帮助!

我现在变了:

foreach (Vechicle value in vehicles)
          {
              Console.WriteLine(vehicles);
          }

到:

foreach (Vechicle value in vehicles)
          {
              Console.WriteLine(value);
          }

按照 cmets 的建议,但现在我明白了:

【问题讨论】:

  • 好像还有错别字。 Console.WriteLine(vehicles) 应该是 Console.WriteLine(value)
  • @AlexeiLevenkov 我希望读入品牌、型号和年份的输出(然后读入列表)作为输出。有没有机会链接到该副本?不,那从来没有奏效。我看到的所有其他示例在参数中的“in”之后都有变量。
  • 当时的例子是错误的。 @p.s.w.g 是正确的。
  • ...不,应该是Console.WriteLine(value)。这是 C# 中 foreach 的参考:msdn.microsoft.com/en-us/library/ttw7t8t6.aspx
  • 啊,显然是另一个错字,您将变量命名为 vaule 而不是 value

标签: c# list class member


【解决方案1】:

默认情况下,Console.WriteLine 将在您传递的参数上调用 ToString - 因为您正在传递集合,所以它使用 ToString 的默认实现,它只打印类名。

如果 Vehicle 用一些合理的输出 (see other answer for implementation) 覆盖 .ToString 而不是简单地将 value 传递给 Console.WriteLine

 foreach (var value in vehicles)
 {
     Console.WriteLine(value);
 }

或者直接打印你需要的任何东西:

    foreach (var value in vehicles)
    {
        Console.WriteLine("Make: {0}, model:{1}", value.Make, value.Model);
    }

对于.ToString(),请考虑使用String.Format,因为如果您想要具有固定的withd或非默认数字格式的东西,它将提供比+更多的格式选项:

 public class Vehicles
 { 
    ....
    public override string ToString() 
    { 
       return String.Format("Make: {0}, model:{1}", Make, Model);
    }
 }

【讨论】:

  • 谢谢,我做了你建议的更改,但我仍然得到错误的输出。然后它将您的建议与其他答案一起使用,并且奏效了。
  • @deathismyfriend "你需要通过 "(如果 Vehicle 用一些合理的输出覆盖 .ToString:" 这可能是你在帖子中所说的,但我无法以这种形式理解它.
  • @COYG 我什至没有注意到那句话。我只是指 foreach(车辆中的 var 值){ Console.WriteLine(value); } 因为您使用车辆代替值。
  • @COYG - 是的...这句话有点尴尬:) 重新措辞所以可能更具可读性。
【解决方案2】:

您需要在您的车辆类中重载 ToString 方法或创建一个返回品牌型号和年份字符串的方法。

一些示例代码。

    public class Vehicles
    {
        public string Make;
        public string Model;
        public string Year;

        public override string ToString()
        {
            return Make + " " + Model + " " + Year;
        }
    }

当您调用 Vehicles.ToString() 时,ToString 方法将被覆盖,它将返回制造型号年份。

【讨论】:

  • 没问题很乐意提供帮助。
猜你喜欢
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
  • 2017-08-07
  • 1970-01-01
  • 2012-10-14
  • 2019-01-05
  • 1970-01-01
相关资源
最近更新 更多