Я создал словарь и пытаюсь добавить некоторые значения.Эти значения являются входными свойствами нашего сгенерированного кода:
_inputParameterMapping = new Dictionary<IVariable, IExpression>();
Я должен добавить три значения, но словарь дает мне следующую ошибку:
'Элемент с таким же ключом уже добавлен'
Когда я сравниваю эти значения, они не равны друг другу.(См. Приложения 1 и 2).Во вложении вы увидите, что memberNames обеих клавиш отличаются друг от друга.
HashCodes обеих клавиш равны друг другу, но объекты не совпадают, и функция Equals приводит к значению true (см. Приложение 3)
Это моя функция:
public StoredProcedureCall(IStoredProcedureDeclaration storedProcedure, params IExpression[] inputValues)
{
if (storedProcedure == null)
throw new ArgumentNullException("storedProcedure");
if (inputValues.Length > storedProcedure.InputParameters.Length)
throw new ArgumentException("inputValues length does not match function.InputParameters length");
_storedProcedure = storedProcedure;
_inputValues = inputValues;
_inputParameterMapping = new Dictionary<IVariable, IExpression>();
for (var i = 0; i < _inputValues.Length; i++)
{
if (!storedProcedure.InputParameters[i].ParameterType.IsInstanceOfType(_inputValues[i]))
{
throw new ArgumentException(string.Format("inputArgument {0} type ({1}) is not same as inputParameter '{2}' type ({3}) in stored procedure '{4}'",
i,
ReflectionUtils.GetTypeNameWithoutNameSpaceQualifiers(_inputValues[i].Type.GetType()),
storedProcedure.InputParameters[i].Template.MemberName,
ReflectionUtils.GetTypeNameWithoutNameSpaceQualifiers(storedProcedure.InputParameters[i].ParameterType),
_storedProcedure.MemberName));
}
_inputParameterMapping.Add(storedProcedure.InputParameters[i].Template, _inputValues[i]);
}
}
Как должна возникать эта проблема и почему словарь считает, что эти свойства равны друг другу?
Спасибо заранее!
С уважением, Желе