2011-08-01 52 views
0

我需要C#实现从ActionScript3的结构如下:如何创建在C#中有多个键哈希表和值

objectArray.push({name:"Stx10",category:123 , isSet:false, isEmpty:true}); 

这样,以后我可以从这样的数组访问对象:

String name =objectArray[i].name 

所以我自然虽然关于C夏普哈希表,但只允许一个键 - >值插入。我不能相信.NET框架没有解决这样的事情... 任何帮助将不胜感激!

+1

不确定HashTable是否是最好的容器使用,你看过字典? – Filip

+0

哈希表也支持你试图做的事情(除了不投射对象 - >字符串)。你确定你没有使用HashSet吗? – Rob

+0

你在索引变量'i'中存储了什么样的值? – stakx

回答

2

它看起来对我来说,你推一个自定义类型的数组。

使用一个IList会给你一个快速的添加方法中,你可以通过你一个新的对象类型,比如:

IList<MyType> myCollection = new List<MyType>(); 

myCollection.Add(new MyType{ 
Name = "foo", 
Category = "bar", 
IsSrt = true, 
IsEmpty = true 
}); 

UPDATE

我想补充一点额外的价值根据Henk对Porges的回答的评论,以下是使用动态类型做同样事情的方法,因此不需要定制类型:

IList<dynamic> myCollection = new List<dynamic>(); 
    myCollection.Add(new { 
     Name = "foo", 
     Category = "bar", 
     IsSet = true, 
     IsEmpty = true}); 
+0

非常感谢杰米和@Porges的答案! –

+0

不客气迈克尔。我刚刚还添加了使用动态列表的更新。 –

+0

哇,这真棒杰米。我真的更感兴趣的动态解决方案,因为在我的情况下,参数不同。谢谢很多! –

2

如果您只是按照您的示例访问索引元素,那么您不需要散列访问,您可以使用List<T>

我封装您的信息类型是这样的:

class Thing { 
    public string Name {get; set;} 
    public int Category {get; set;} 
    public bool IsSet {get; set;} 
    public bool IsEmpty {get; set;} 
} 

然后:

objectList.Add(new Thing{Name="Stx10", Category=123, IsSet=false, IsEmpty=true}) 

// ... 

string name = objectList[i].Name; 
+0

和一个匿名/动态类型来容纳'name','category'等。 –

0

别忘了

var d=new Dictionary<string, object>(); 

你有什么打算吗?

相关问题