.net 如何实现我自己的可以像字典一样使用的集合

.net 如何实现我自己的可以像字典一样使用的集合,.net,vb.net,.net,Vb.net,因此,我有一个对象,它是来自web请求的回复的一部分,该请求上有两个属性。两者都是字符串数组。第一个称为COLUMNNAMES,第二个称为VALUES。例如,COLUMNNAMES将包含以下内容: “ID”、“名称”、“已添加日期”、“已更改日期” 和值将包含以下内容: “1”、“苹果”、“09/21/2013”、“09/21/2013” “2”、“橙子”、“09/21/2013”、“09/21/2013” “3”、“草莓”、“09/21/2013”、“09/21/2013” 我希望能够以某种方

因此,我有一个对象,它是来自web请求的回复的一部分,该请求上有两个属性。两者都是字符串数组。第一个称为COLUMNNAMES,第二个称为VALUES。例如,COLUMNNAMES将包含以下内容:

“ID”、“名称”、“已添加日期”、“已更改日期”

和值将包含以下内容:

“1”、“苹果”、“09/21/2013”、“09/21/2013”

“2”、“橙子”、“09/21/2013”、“09/21/2013”

“3”、“草莓”、“09/21/2013”、“09/21/2013”

我希望能够以某种方式将这些数据处理成一种我可以这样调用的数据结构:

Dim rows = GetReply()

For Each r in rows
    Dim value = r("ID") 'ID is a column name
Next 

是否有一种类型我可以实现来创建它,或者它已经存在?谢谢

您可以使用LINQ将其转换为一系列
字典
s:

class Reply {
    string[] _columnNames = {"ID", "NAME"}; // the list of columns you received

    string[][] _rowValues = { // the lists of values you received
        new[]{"1", "APPLES"},
        new[]{"2", "ORANGE"}
    };

    public IEnumerable<Dictionary<string, string>> Rows {
        get {
            foreach (var row in _rowValues) {
                yield return _columnNames
                                .Zip(row, (key, value) => new {key, value})
                                .ToDictionary(kv=>kv.key, kv=>kv.value);
            }
        }
    }
}

// ...

foreach (row in new Reply().Rows) {
    var id = row["ID"];
    var name = row["NAME"];
}
类回复{
string[]\u columnNames={“ID”,“NAME”};//您收到的列列表
字符串[][].\u rowValues={//您收到的值列表
新[]{“1”,“苹果”},
新[]{“2”,“橙色”}
};
公共可数行{
得到{
foreach(变量行在_行值中){
收益率返回_列名称
.Zip(行,(键,值)=>new{key,值})
.ToDictionary(千伏=>千伏键,千伏=>千伏值);
}
}
}
}
// ...
foreach(新回复()中的行。行){
变量id=行[“id”];
变量名称=行[“名称”];
}

您只需使用LINQ将其转换为一系列的
字典
s:

class Reply {
    string[] _columnNames = {"ID", "NAME"}; // the list of columns you received

    string[][] _rowValues = { // the lists of values you received
        new[]{"1", "APPLES"},
        new[]{"2", "ORANGE"}
    };

    public IEnumerable<Dictionary<string, string>> Rows {
        get {
            foreach (var row in _rowValues) {
                yield return _columnNames
                                .Zip(row, (key, value) => new {key, value})
                                .ToDictionary(kv=>kv.key, kv=>kv.value);
            }
        }
    }
}

// ...

foreach (row in new Reply().Rows) {
    var id = row["ID"];
    var name = row["NAME"];
}
类回复{
string[]\u columnNames={“ID”,“NAME”};//您收到的列列表
字符串[][].\u rowValues={//您收到的值列表
新[]{“1”,“苹果”},
新[]{“2”,“橙色”}
};
公共可数行{
得到{
foreach(变量行在_行值中){
收益率返回_列名称
.Zip(行,(键,值)=>new{key,值})
.ToDictionary(千伏=>千伏键,千伏=>千伏值);
}
}
}
}
// ...
foreach(新回复()中的行。行){
变量id=行[“id”];
变量名称=行[“名称”];
}

这里最好的答案是数据表

这里最好的答案是数据表

DataTable类就是为这个而设计的。我每天都使用数据表,甚至没有考虑它们。早上对我来说太早了!谢谢如果你回答了自己的问题,要么自己回答并将其标记为接受,要么删除该问题,这样它就不会一直作为没有接受答案的问题出现在头版。DataTable类就是为此而设计的。我每天都使用数据表,甚至没有考虑它们。早上对我来说太早了!谢谢如果你回答了自己的问题,要么自己回答并将其标记为已接受,要么删除该问题,这样它就不会一直作为未接受答案的问题出现在头版。