【问题标题】:Print out object elements from list [duplicate]从列表中打印出对象元素[重复]
【发布时间】:2016-03-12 12:28:52
【问题描述】:

我正在尝试使用 foreach 循环在主范围内打印列表中的对象元素,但唯一打印出来的是:

ConsoleApplication1.WorldMap

这里出了什么问题,如何让它打印出实际的元素?

using ConsoleApplication1;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
     class WorldMap
     {

        private string higher;
        private string lower;

        public worldMap()
        {
        }

        public WorldMap(string higher, string lower)
        {
           this.higher = higher;
           this.lower = lower;
        } 

        public string Higher
        {
            get { return higher; }
            set { higher = value; }
        }

        public string Lower
        {
            get { return Lower; }
            set { Lower = value; }
        }
    }   
  class Program
  {

    static void Main(string[] args)
    {

        WorldMap map = new WorldMap();

        List<WorldMap> mapList = new List<WorldMap>();
        mapList.Add(new WorldMap(map.Lower, map.Higher));

        Console.WriteLine("\tInsert highest point:");
        map.Highest= Console.ReadLine();
        Console.WriteLine("\tInsert lowest point");
        map.Lowest= Console.ReadLine();


        using (StreamWriter writer = new StreamWriter(@"C:\freq.txt", true))
        { 
            writer.WriteLine(map.Lower + map.Higher); 
        }

        foreach (object view in mapList)
        {
            Console.WriteLine(view);
        }
      }
   }
}

【问题讨论】:

  • 是的,非常感谢您的回答!控制台中没有显示任何内容,但我会再次检查您的答案。
  • 你也知道为什么控制台什么都没有出现吗?因为在这一行 mapList.Add(new WorldMap(map.Lower, map.Higher)); map.Lowermap.Higher 是空字符串,你应该为构造函数发送一个值,如下所示:mapList.Add(new WorldMap("lower", "higher"));
  • 现在可以使用了,谢谢!使用 override 并通过 writeline 调用 main 中的对象。在普通环境中,哪一种更可取?更进一步……
  • 我更喜欢override
  • 所以有两个选项,1 个输出,Console.WriteLine(map.ToString());使用以下有什么区别吗? (map.Lower, map.Higher));或 mapList.Add(new WorldMap("lower", "higher")); : mapList.Add(new WorldMap("lower", "higher"));.

标签: c# console-application


【解决方案1】:

因为您没有覆盖WorldMapToString 方法,所以Console.WriteLine(view) 返回类的名称WorldMap。您可以覆盖类中的ToString 方法或调用foreach 循环中的属性,但不要忘记您应该将object 更改为var。像这样:

class WorldMap
{

   ....
   ....
   public override string ToString()
   {
      return Lower + " " + Higher;
   }
}

或者(object更改为var):

foreach (var view in mapList)
{
     Console.WriteLine(view.Lower + " " + view.Higher);
}

【讨论】:

    【解决方案2】:

    view 是 WorldMap 类型,改为这样使用:

    foreach (object view in mapList)
            {
                Console.WriteLine(view.Lower.ToString() + "," + view.Higher.ToString() );
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-12
      • 2011-10-11
      • 1970-01-01
      • 2020-03-23
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      相关资源
      最近更新 更多