C#List <t> / List <class>获取值

时间:2016-05-27 08:42:09

标签: c#

我给我的班级写了不同的价值观,我想得到班级的价值观。 Debug输出显示:

值:List.data索引0 值:List.data索引1

我如何获得我的类属性的真正价值?

我的代码示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.Diagnostics;

namespace List
{
    class data
    {
        public string name { get; set; }
        public Rectangle rect { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {

            data dat1 = new data();
            List<data> listdat = new List<data>();
            dat1.name = "test1";
            dat1.rect = new Rectangle(10, 10, 10, 10);
            listdat.Add(dat1);

            data dat2 = new data();
            dat2.name = "test2";
            dat2.rect = new Rectangle(20, 20, 20, 20);
            listdat.Add(dat2);

            data dat3 = new data();
            dat3.name = "test3";
            dat3.rect = new Rectangle(30, 30, 30, 30);
            listdat.Add(dat3);

            listdat.RemoveAt(1);
            foreach (var item in listdat)
            {
                //This will yield the proper index that you are currently on
                int index = listdat.IndexOf(item);
            }

            foreach (var item in listdat.Select((value, index) => new { Value = value, Index = index }))
            {
                //Get the value through item.Value;
                var currentValue = item.Value;
                //Get the index through item.Index;
                int currentIndex = item.Index;
                Debug.WriteLine("Value: {0} Index {1}", currentValue, currentIndex);
            }
            int i = 0;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

当您只是放置一个要打印的对象时,它会调用objext的ToString()方法,该方法默认只返回类&#39;名称。

如果您希望输出不同的内容,则必须覆盖。

您可以将其添加到data类:

public override string ToString()
{
    return name;
}

答案 1 :(得分:1)

我想知道为什么你使用这个奇怪的Select语句而不是一个好的旧式for循环,它也为你提供了索引:

for(int i = 0; i < listdat.Count; i++)
{
    var currentValue = listdat[i].Name;
    int currentIndex = item.Index;
    Debug.WriteLine("Value: {0} Index {1}", currentValue, i);
}

您甚至不必更改data - 类代码,只需访问当前实例name的属性(可能是listdat[i])即可完成。

顺便说一下。以下代码无用,因为变量index在每个循环中都被重置但从未读过:

foreach (var item in listdat)
{
    //This will yield the proper index that you are currently on
    int index = listdat.IndexOf(item);
}