private static Matcher<T> EqualTo<T>(T item)
{
return new IsEqual<T>(item);
}
Как изменить приведенное выше определение метода так, чтобы следующие были допустимыми / разрешенными.
EqualTo("abc");
EqualTo(4);
EqualTo(null); // doesn't compile. EqualTo<string>(null) does
Попытка перенести некоторый код Java, где null
кажется приемлемым значением для Параметр T
.
Обновление
Спасибо: за все ответы, особенно на Иамона и Джейсона. Я не хотел, чтобы вызовы методов беспокоились о выводе типов. Следующая перегрузка исправила это.
private static Matcher<object> EqualTo(object item)
{
return EqualTo<object>(item);
}
На самом деле вышеупомянутый вопрос был частью большой головоломки. Конечная цель заключалась в том, чтобы сработало следующее.
this.AssertThat(null, EqualTo(null));
this.AssertThat(null, Not(EqualTo("hi")));
this.AssertThat("hi", Not(EqualTo(null)));
Применено то же исправление .. RFC . (Игнорируйте уродливую часть метода расширения - это Еще одна проблема.Захотелось, чтобы эти методы были во всех test-fixture без наследования. )
public static void AssertThat<T>(this object testFixture, object actual, Matcher<T> matcher, string message = "")
{
AssertThat(anyObject, (T)actual, matcher, message);
}
public static void AssertThat<T, TSuper>(this object testFixture, T actual, Matcher<TSuper> matcher, string message = "") where T : TSuper
{
... check and assert