2010-01-19 4 views
3

Я хочу функцию, которая делает это:C# Возвращение Ноль в соответствующий вход Тип

private static dynamic Zero(Type T) 
    { 
     if (T == typeof(Decimal)) 
     { 
      return Decimal.Zero; 
     } 
     else if (T == typeof(Double)) 
     { 
      return new Double(); 
     } 
     else if (T == typeof(Int64)) 
     { 
      return new Int64(); 
     } 
     ... 
    } 

Но для всех типов. Я бы хотел, чтобы вы не писали заявление о гиганте. Есть ли другой способ сделать это? Я использую C# 4.0.

ответ

2

Для типа значения будет использоваться конструктор по умолчанию.

if(T.IsValueType()) return Activator.CreateInstance(T); 

Тогда вы можете делать другие вещи, как тестирование для нулевого метода по типу, и если да, называя это.

+0

новый T() не работает. – Ames

+1

Упс. Я исправлю это. –

+1

... и предположительно «else return null;» для обработки «нулевого» случая для ссылочных типов. Одним из возможных особых случаев может быть строка в зависимости от того, хочет ли исходный плакат «нулевая строка» быть пустой или пустой (при условии, что он вообще заботится о строках!). – itowlson

5
return default(T); 
+1

Не работает: тип или пространство имен имя «T» не может быть найден (вы пропали без вести с помощью директивы или ссылка на сборку?) Я думаю, T должен быть общим аргументом, чтобы работать по умолчанию(). – Ames

+0

@mitch 'default' принимает параметр типа –

+0

+1 ... Эта работа _will_, но вам также необходимо изменить подпись функции. –

1

Нет необходимости dynamic здесь:

private static T Zero<T>() 
{ 
    return default(T); 
} 
+0

+1 от меня. .... –

+0

У Гуффа было все в порядке ... не уверен, почему он удалил свой ответ. –

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

  • Нет связанных вопросов^_^