2010-04-01 65 views
2

我需要一個字典,但我也需要存儲一個關於對象在字典中的布爾值。這是最好的方式。需要一個.NET字典<字符串,對象>只有一點功能

類似Dictonary<string,object,bool>會是理想的,但不存在。

我的第一個想法是:

public class SomeObject 
{ 
    public object Value { get; set; } 
    public bool Flag { get; set; } 
} 
// and then use: 
Dictionary<string,SomeObject> myDictionary; 

我的第二個想法是實現IDictionary<string,object>幷包含兩個字典內被實現的方法和屬性訪問操作。他們必須保持同步:

class DataDictionary : IDictionary<string, object> 
{ 
    private Dictionary<string, bool> _clientSideFlags = new Dictionary<string, bool>(); 
    private Dictionary<string, object> _data = new Dictionary<string, object>(); 

    // implemented methods, etc. 
} 

我的第三個想法是看看在StackOverflow的人會做什麼。

+0

您也可以創建自己的自定義屬性商店'字典'並將其附加到的對象類。這樣,一旦你從'Dictionary '中的特定對象,你可以從自定義屬性中的次字典中獲取相應的bool。 – 2010-04-01 17:57:35

回答

6

請隨你的第一個想法 - 它簡單,有效,易於理解。是的,自定義類型可能感覺過度殺傷,但會增加您的代碼的可讀性。任何稍後維護此代碼的人都會感謝您。

14

你可以使用:

Dictionary<string, KeyValuePair<object,bool>> 

這可讓您存儲KeyValuePair<object,bool>,它提供了使用BCL型自定義類。

這就是說,我經常發現自己使用自定義的類或結構來代替它。就我個人而言,我發現爲我的價值存儲實施自定義類型通常比使用KeyValuePairTuple或其他非特定類型更易於維護。一年後的使用情況,如果我有一個具有適當名稱的自定義類型,則會更加明顯。

6

我會去你的第一個想法。

此外,我會遠離你的第二個想法。你會做很多編碼,只是爲了生成一個在運行時執行兩次工作(兩次查找)的類。全是失敗者。

1

爲了快速解決,Dictionary<string, KeyValuePair<object, bool>>的作品。

對於一個更好的解決方案,很容易實現一個通用的Pair<T1,T2>類型與正確的哈希碼組合和平等支持,這比濫用KeyValuePair<,>好,你可以給它的構造函數和訪問等你想要的。

(或者說,是的,一次性的新對象。只是不要忘了重載Equals和GetHashCode)

2

我會去你的第一個想法。它基本上是一個簡單的包裝類爲您的對象。但我會強制將屬性提供給構造函數。

public class SomeObject 
{ 
    public SomeObject(object value, bool flag) 
    { 
     Value = value; 
     Flag = flag; 
    } 

    public object Value { get; private set; } 
    public bool Flag { get; private set; } 
} 
0

我通常使用:

Dictionary<string, KeyValuePair<object,bool> > 

對於這種類型的場景。它對我來說效果很好。

0

這是別的可以考慮的事情,可能適用於您的情況,或者它可能不會。

Dictionary<string, object> myDictionaryTrue; 
Dictionary<string, object> myDictionaryFalse; 
0

只是爲了說明它,我不會就它的優點/缺點爭論。

在.NET 4.0中,你可以做

new List<Tuple<string, object, bool>>()

new Dictionary<string,Tuple<object, bool>>()

相關問題