2010-04-01 64 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>>()

相关问题