我想要的是存儲名稱,對象對的能力。創建任何對象的字典
不像objC c#的Dictionary
需要類型。在objC中,我會使用id
來表示「任何對象」。
我該如何在c#中管理這個。
所以,我正在尋找的是:
Dictionary<String,id>
。
對不起,如果這是非常基本的!
我想要的是存儲名稱,對象對的能力。創建任何對象的字典
不像objC c#的Dictionary
需要類型。在objC中,我會使用id
來表示「任何對象」。
我該如何在c#中管理這個。
所以,我正在尋找的是:
Dictionary<String,id>
。
對不起,如果這是非常基本的!
沒有進入很多faffery的交談多強類型對象的列表,實現這一目標的最簡單的方法是用Dictionary<string, object>
並投出你的對象類型,因爲你需要它:
int i = (int)myDictionary["Age"];
string n = (string)myDictionary["Name"];
有幾個動態選擇這裏如ExpandoObject
:
http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject.aspx
如果你去的對象字典的方法,注意boxing on value types。使用動態方法不會產生裝箱問題,但需要運行時分辨率,因此性能會稍微受到影響。
沒有什麼是免費的,但總的來說,你不應該看到這種小的開銷的影響。
如果拆箱是一個問題,.NET 4中總會有新的動態類型。
不知道如果我理解正確的你,但你可以做如下:
Dictionary s = new Dictionary(); Object a = new Int32(); a = 1; Object b = new Double(); b = 2.0; s.Add("a", a); s.Add("b", b); Int32 v = Convert.ToInt32(s["a"]); Double u = Convert.ToDouble(s["b"]); Console.WriteLine(v + " " + u);
問這可能表明可能會有一些不好的設計背後隱藏着這一點。它總是當你需要一個異構對象的集合時。
由於不知道集合中的對象類型,您總是需要進行某種類型的檢查,如if (dictionary["xy"] is string) {...}
這是一種代碼異味。
將某種包裝到普通類中是否可以選擇?這將允許你指定一些常用操作(因爲如果你需要它在同一個詞典中,你可能需要一些常用操作)。例如像(認爲它是僞代碼):
class Base
{
bool IsCollection;
}
class StringItem : Base
{
string Contents;
IsCollection = false;
override ToString() { return this.Contents; }
}
class ListItem : Base
{
List<StringItem> Contents;
IsCollection = true;
override ToString() { return string.Join(",", this.Contents.ToArray() }
}
那麼你可能會對基礎定義的Dictionary<string, Base>
和使用操作,如ToString
或任何自定義。
'字典<字符串,對象>'與演員把它拿出來?如果你打算使用值類型,可能會產生拳擊影響。 –
什麼是拳擊影響?大部分「對象」都是字符串,但在少數情況下,它們可能會列出你看到的字符串。 –
@ThomasClayson:既不是'字符串也不是'列表'是一個值類型,所以不會有任何涉及的拳擊。 (做一些搜索,以瞭解更多關於拳擊的信息,如果你不知道的話......) –