If you want specifically that syntax:
List<object> values = null;
this.checkedMetainfoValues.TryGetValue("metainfo_sample", out values);
You can create your own dictionary, which inherits from normal dictionary, as follows:
private class MyStrangeDictionary : Dictionary<MetaInfoValueGroupTag, List<object>>
{
public MyStrangeDictionary() : base(MetaInfoValueGroupTag.MetainfoComparer)
{
}
public List<object> this[string key]
{
get
{
return this[new MetaInfoValueGroupTag {MetaInfo = key}];
}
//set
//{
// Add(new MetaInfoValueGroupTag { MetaInfo = key }, value);
//}
}
public bool TryGetValue(string key, out List<object> value)
{
if (ContainsKey(new MetaInfoValueGroupTag {MetaInfo = key}))
{
value = this[key];
return true;
}
value = default(List<object>);
return false;
}
}
The usage will be as follows:
_checkedMetainfoValues = new MyStrangeDictionary();
_checkedMetainfoValues.Add(new MetaInfoValueGroupTag { MetaInfo = "f"}, new List<object> { "first"});
_checkedMetainfoValues.Add(new MetaInfoValueGroupTag { MetaInfo = "s"}, new List<object> { "second", "2"});
var test = _checkedMetainfoValues["f"];
foreach (var t in test)
{
Console.WriteLine(t);
}
List<object> test1;
_checkedMetainfoValues.TryGetValue("s", out test1);
foreach (var t in test1)
{
Console.WriteLine(t);
}
EDIT:
For the sake of completeness here is your class along with comparer:
private class MetaInfoValueGroupTag
{
private sealed class MetainfoEqualityComparer : IEqualityComparer<MetaInfoValueGroupTag>
{
public bool Equals(MetaInfoValueGroupTag x, MetaInfoValueGroupTag y)
{
if (ReferenceEquals(x, y)) return true;
if (ReferenceEquals(x, null)) return false;
if (ReferenceEquals(y, null)) return false;
if (x.GetType() != y.GetType()) return false;
return string.Equals(x.metainfo, y.metainfo);
}
public int GetHashCode(MetaInfoValueGroupTag obj)
{
return (obj.metainfo != null ? obj.metainfo.GetHashCode() : 0);
}
}
private static readonly IEqualityComparer<MetaInfoValueGroupTag> MetainfoComparerInstance = new MetainfoEqualityComparer();
public static IEqualityComparer<MetaInfoValueGroupTag> MetainfoComparer
{
get { return MetainfoComparerInstance; }
}
private string metainfo;
//...
public string MetaInfo
{
get { return metainfo; }
set { metainfo = value; }
}
//...
}