一个很好的 C# 集合

本文关键字:集合 很好 一个 | 更新日期: 2023-09-27 17:56:51

在 C# 中存储以下数据的好集合是什么:

我有复选框,这些复选框引入了与每个复选框关联的主题 ID、varnumber、varname 和标题。

我需要一个可以是任何大小的集合,比如 ArrayList,也许是:

      list[i][subjectid] = x;
      list[i][varnumber] = x;
      list[i][varname] = x;
      list[i][title] = x;

有什么好主意吗?

一个很好的 C# 集合

一个List<Mumble>,其中 Mumble 是一个存储属性的小帮助类。

List<Mumble> list = new List<Mumble>();
...
var foo = new Mumble(subjectid);
foo.varnumber = bar;
...
list.Add(foo);
,..
list[i].varname = "something else";
public Class MyFields
{
    public int SubjectID { get; set; }        
    public int VarNumber { get; set; }
    public string VarName { get; set; }
    public string Title { get; set; }
}
var myList = new List<MyFields>();

要访问成员:

var myVarName = myList[i].VarName;

一个通用列表,List<YourClass>会很棒 - 其中YourClass具有subjectid,varnumber等属性。

您可能希望为此使用二维数组,并为每个值分配数组第二维中的位置。例如,list[i][0]subjectidlist[i][1]varnumber,依此类推。

确定哪个集合,通常从你想用它做什么开始?

如果您唯一的标准是它可以是任何大小,那么我会考虑List<>

由于这是一个键,值对,我建议您使用基于通用IDictionary的集合。

// Create a new dictionary of strings, with string keys, 
// and access it through the IDictionary generic interface.
IDictionary<string, string> openWith = 
    new Dictionary<string, string>();
// Add some elements to the dictionary. There are no 
// duplicate keys, but some of the values are duplicates.
openWith.Add("txt", "notepad.exe");
openWith.Add("bmp", "paint.exe");
openWith.Add("dib", "paint.exe");
openWith.Add("rtf", "wordpad.exe");

正如其他人所说,看起来你最好创建一个类来保存值,以便你的列表返回一个包含你需要的所有数据的对象。虽然二维数组可能很有用,但这看起来不像是其中一种情况。

有关更好的解决方案以及为什么在这种情况下使用二维数组/列表不是一个好主意的详细信息,您可能需要阅读:创建对象列表而不是许多值列表

如果外部有可能[i]的顺序不是可预测的顺序,或者可能存在间隙,但您需要将其用作键:

public class Thing
{
    int SubjectID { get; set; }        
    int VarNumber { get; set; }
    string VarName { get; set; }
    string Title { get; set; }
}
Dictionary<int, Thing> things = new Dictionary<int, Thing>();
dict.Add(i, thing);

然后找到一个Thing

var myThing = things[i];