Я издеваюсь над вызовом функции с двумя аргументами. 1. входной неизменяемый объект класса 2. выходной параметр.
образец кода:
Mock<ISample> mockSample = new Mock<ISample>();
SampleClass MyKey = new SampleClass() { prop1 = 1 };
SampleOutput output = new SampleOutput() { prop2 = 2 };
mockSample.setup(s => s.SampleMethod(It.is<SampleKey>(t => t.Equals(MyKey)),
out sampleOut))).Returns(true);
в фактическом выполнении кода эта фиктивная функция возвращает правильное значение, если ключ совпадает с фиктивным ключом. Однако я вижу проблему, заключающуюся в том, что эта фиктивная функция возвращает то же значение, даже если ключ не совпадает.
Любые входы?
Добавляем код ключа:
public class Key
{
public readonly DateTime prop1;
public readonly string prop2;
public Key(DateTime prop1, string prop2)
{
this.prop1 = prop1;
this.prop2 = prop2;
}
public override bool Equals(object obj)
{
if (obj == null)
return false;
if (ReferenceEquals(this, obj))
return true;
Key other = obj as Key;
return this.prop1 == other.prop1 && string.Compare(this.prop2, other.prop2);
}
public override int GetHashCode()
{
return prop1.GetHashCode() ^ prop2.GetHashCode();
}
}
return this.prop1 == other.prop1 && string.Compare(this.prop2, other.prop2);
вызывает ошибкуError CS0019 Operator '&&' cannot be applied to operands of type 'bool' and 'int'
- person KozhevnikovDmitry   schedule 10.09.2018.Compare
для проверки на равенство (вместо сортировки/упорядочения) — это плохо. Если причина в том, что вам нужно сравнение по культуре (а не по порядковому номеру), вы можете использоватьstring.Equals(this.prop2, other.prop2, StringComparison.CurrentCulture)
. Конечно, если вам нужно порядковое сравнение, вы просто скажетеthis.prop2 == other.prop2
, как обычно со строками (для этого существует специальная предопределенная (в спецификации C#) перегрузкаoperator ==
). - person Jeppe Stig Nielsen   schedule 13.09.2018