C#类对象覆盖
本文关键字:覆盖 对象 | 更新日期: 2023-09-27 18:25:31
我是OOP的新手,所以请考虑到这一点。我将从这次匹配中获得的数据放入类的对象中,但这是在foreach循环中完成的,所以每次调用它时,对象内的数据都会被覆盖,最后我希望对象中有所有数据。但我只记得上次比赛。我应该如何避免这种覆盖?也许我做的方式完全错了?
foreach (var match in matches)
{
dataTable.Rows.Add(new Group[] { match.Groups["C0"], match.Groups["C1"], match.Groups["C2"], match.Groups["C3"], match.Groups["C4"] });
MyClass sk = new MyClass();
sk.Category = match.Groups["C0"].ToString();
sk.Device = match.Groups["C1"].ToString();
sk.Data_Type = match.Groups["C2"].ToString();
sk.Value = match.Groups["C3"].ToString();
sk.Status = match.Groups["C4"].ToString();
}
创建列表:
var list = new List<MyClass>();
foreach (var match in matches)
{
dataTable.Rows.Add(new Group[] { match.Groups["C0"], match.Groups["C1"],
match.Groups["C2"], match.Groups["C3"], match.Groups["C4"] });
var sk = new MyClass {
Category = match.Groups["C0"].ToString(),
Device = match.Groups["C1"].ToString(),
Data_Type = match.Groups["C2"].ToString(),
Value = match.Groups["C3"].ToString(),
Status = match.Groups["C4"].ToString()
};
list.Add(sk);
}
那么您就拥有了列表中的所有项目。您也可以使用LINQ,例如:
var items = from match in matches
select new MyClass {
Category = match.Groups["C0"].ToString(),
Device = match.Groups["C1"].ToString(),
Data_Type = match.Groups["C2"].ToString(),
Value = match.Groups["C3"].ToString(),
Status = match.Groups["C4"].ToString()
};
并在CCD_ 1上迭代。
在循环的每次迭代中,对象sk都会超出范围。
如果你想列出它们,可以试试这样的方法:
var list = new List<MyClass>();
foreach (var match in matches)
{
dataTable.Rows.Add(new Group[] { match.Groups["C0"], match.Groups["C1"], match.Groups["C2"], match.Groups["C3"], match.Groups["C4"] });
MyClass sk = new MyClass();
sk.Category = match.Groups["C0"].ToString();
sk.Device = match.Groups["C1"].ToString();
sk.Data_Type = match.Groups["C2"].ToString();
sk.Value = match.Groups["C3"].ToString();
sk.Status = match.Groups["C4"].ToString();
list.Add(sk);
}
这个问题与OOP本身无关。这更多地与范围的概念有关。您没有对创建的sk
对象执行任何操作。因此,当代码到达循环体的底部时,sk
就会被丢弃。
也许您打算将对对象的引用存储在一个列表中:
//Create a list to store your new shiny sk objects
List<MyClass> sks = new List<MyClass>();
foreach (var match in matches)
{
dataTable.Rows.Add(new Group[] { match.Groups["C0"], match.Groups["C1"], match.Groups["C2"], match.Groups["C3"], match.Groups["C4"] });
MyClass sk = new MyClass();
sk.Category = match.Groups["C0"].ToString();
sk.Device = match.Groups["C1"].ToString();
sk.Data_Type = match.Groups["C2"].ToString();
sk.Value = match.Groups["C3"].ToString();
sk.Status = match.Groups["C4"].ToString();
//Add the object to your list
sks.Add(sk);
}
您需要的是一个List或类似的东西:
List<MyClass> myList = new List<MyClass>();
foreach (var match in matches)
{
dataTable.Rows.Add(new Group[] { match.Groups["C0"], match.Groups["C1"], match.Groups["C2"], match.Groups["C3"], match.Groups["C4"] });
MyClass sk = new MyClass();
sk.Category = match.Groups["C0"].ToString();
sk.Device = match.Groups["C1"].ToString();
sk.Data_Type = match.Groups["C2"].ToString();
sk.Value = match.Groups["C3"].ToString();
sk.Status = match.Groups["C4"].ToString();
myList.Add(sk);
}
在这段代码的末尾,您将获得包含所有项目的myList
,并且您可以使用foreach
来遍历它们,例如