Как разрешить параметру универсального типа для метода C # принимать нулевой аргумент?

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
8
задан Gishu 10 April 2011 в 15:56
поделиться