Я беспокоюсь о том, что Parameter
изменчив. Если ( после добавления его в словарь) вы изменили любое из значений, которые используются при генерации GetHashCode()
(т.е. все они), тогда все ставки выключены, и вы не гарантированно увидеть ваш товар снова. Я бы не стал делать эти публичные сеттеры, т. Е.
[DataMember]
public string ParamName // applies to all the properties, not just this one
{
get { return _name; }
private set { _name = value; }
}
На самом деле, я бы, вероятно, отбросил явные поля и использовал бы автоматически реализованные свойства C # 3.0:
[DataMember]
public string ParamName { get; private set; }
В качестве примера, который ломается при изменении параметра:
var data = new Dictionary<Parameter, string>();
Parameter p;
data.Add((p = new Parameter(Guid.NewGuid(), Guid.NewGuid(), "abc",
SchemaElementType.A)), "def");
var dv = new DefaultValue(data);
string val1 = dv.GetParameterValue("abc"); // returns "def"
p.ParamGuid = Guid.NewGuid();
string val2 = dv.GetParameterValue("abc"); // BOOM
В качестве последней мысли; если типичное использование - поиск по string
, то почему бы не использовать имя в качестве ключа для внутреннего словаря? В данный момент вы не используете словарь должным образом.