基本上我想导出一些列表。 Theese列表包含不同的列。例如
StudentID - StudentName - Assignment1 - Assignment2 - 期末考试
但有时会有不同的考试。我正在使用元组类添加theese列表。
exportList.Add(new Tuple<string, string, string>(item.ID, item.Name + item.Surname, payList[i]));
这包含3列。有没有办法动态更改元组参数?
答案 0 :(得分:1)
在你的情况下,我不会使用Tuple
。我宁愿使用彼此继承的classes
来允许变量属性。
例如:
public class Student // only a sample
{
public string Name
{
get;
set;
}
}
public class StudentWithGrade : Student
{
public int Grade
{
get;
set;
}
}
您的列表可以接受Student
类型,可以是Student
或StudenWithGrade
或从学生继承的任何内容。
这使您的代码对其他人更具可读性。
修改强>
如果你真的需要一些东西动态,请使用词典列表,
列表中的一个条目表示row
种类和条目
在Dictionary<string, object>
中代表列。
答案 1 :(得分:1)
不,元组是不可变的。您似乎并没有将元组用于他们想要使用的内容。
如果您坚持不使用类来保存数据,最好的选择是词典:
exportList.Add(new Dictionary<string, string>() { { "ID", item.ID }, { "Name", item.Name }, { "Surname", item.Surname }, { "PayList", payList[i] } });
现在,如果您获得整个项目,您将能够按如下方式编辑每个项目:
exportList[0]["ID"] = 11;
exportList[0]["Name"] = "Matías";
exportList[0]["Surname"] = "Fidemraizer";
另一个选择是使用动态对象,如ExpandoObject
:
dynamic person = new ExpandoObject();
person.ID = 11;
person.Name = "Matías";
person.Surname = "Fidemraizer";
exportList.Add(person);
由于ExpandoObject
实现IDictionary<string, object>
,您可以使用常规点语法访问属性,或者您可以将ExpandoObject
转换为IDictionary<string, object>
并将属性作为字典键访问:
dynamic person = exportList[0];
string name = person.Name;
// or...
IDictionary<string, object> person = (IDictionary<string, object>)exportList[0];
string name = (string)person["Name"];
顺便说一句,我仍然觉得你应该去设计和使用一个真正的课程来抓住你的人。数据无论如何...