2013-07-18 3 views
1

У меня есть метод:Как не указывать аргумент типа в универсальном методе, когда требуемый аргумент равен NULL?

public HttpRequestMessage CreateRequest<T>(T genericObject = default(T)) 
{ 
    ... 
    if (!Equals(genericObject, default(T))) 
    ... 
} 

Я могу назвать это:

var request = CreateRequest<int>(); 

видя, как я на самом деле не использовать тип по умолчанию (я хотел бы, чтобы установить пустое значение по умолчанию), как я могу прекратить определять общий тип как int (или любой другой тип, если это важно), когда я вызываю метод?

Редактировать Дело в том, что обычно мне нужно указать тип и использовать аргумент. Однако иногда мне не нужно использовать аргумент, и я хочу, чтобы он был установлен на Null или Zero вместо написания случайного типа типа «int» в приведенном выше примере

+1

Это действительно не ясно, что вы имеете в виду - потребности компилятора * некоторые * признак того, что 'T' должно быть ... –

+0

' null' не является типом. Вам нужно будет указать, что вы ожидаете, что метод вернет или напишет не-общий метод с некоторым возвращаемым типом. – Romoku

ответ

1

Вы не можете, вызывать , что - это подпись вашего метода.

Вы можете создать еще один метод, который не имеет каких-либо общие аргументы, так что вы будете в состоянии назвать это нравится:

var request = CreateRequest(); 
+0

Это правильный ответ! Обычно для универсальных методов требуется ссылка на тип объекта. Если null это означает, что это не нужно, вам нужен не общий метод. – CarlosB

+0

Дело в том, что мне обычно нужно указать тип и использовать аргумент. Однако иногда мне не нужно использовать аргумент, и я хочу, чтобы он был установлен в Null или Zero вместо написания случайного типа типа «int» в приведенном выше примере. – AntonJ

+0

@AntonJ: это архитектурное решение, поэтому учтите, как часто вы используете его с параметром и без него и добавляете или не используете метод без каких-либо общих аргументов. Все зависит от вашего удобства. – Tigran

0

Не думаю, что вы можете. Для универсальной функции вам необходимо указать общий параметр, или вам нужно передать что-то, из чего он может вывести общий параметр.

Чтобы обойти это, вы можете написать не общую обертку.

Смежные вопросы