我给我的班级写了不同的价值观,我想得到班级的价值观。 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;
}
}
}
答案 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);
}