Можно ли сделать метод со случайным типом? - PullRequest
1 голос
/ 11 марта 2011

Привет

Мне интересно, возможно ли создать один метод со случайным типом.

Что-то вроде:

public static T CheckWhatTIs(object source)
{
    MessageBox.Show("T = " + T.GetType());
}

, где я бы получил«T = bool», когда я использую его как CheckWhatTIs (true);и получить "T = int", когда я использую его в качестве CheckWhatTIs (1);

Возможно ли это сделать?

Ответы [ 2 ]

6 голосов
/ 11 марта 2011
public static void CheckWhatTIs<T>(T source)
{
    MessageBox.Show("T = " + source.GetType());
}

Несколько замечаний:

  1. Функция не имеет типа возврата, так как вы просто показываете окно сообщения
  2. Если вы хотите использовать его как CheckWhatTIs(1) и CheckWhatTIs(true), не объявляйте его как метод расширения, удалите this из параметров.
5 голосов
/ 11 марта 2011

Это зависит от того, хотите ли вы отобразить тип T или тип объекта, к которому относится параметр.

Рассмотрим:

public static void ShowTypes<T>(T item)
{
    Console.WriteLine("T = " + typeof(T));
    Console.WriteLine("item.GetType() = " + item.GetType());
}

Теперь представьте:

ShowTypes<object>("foo");

Это полностью допустимо, но тип T - это System.Object, тогда как тип объекта - System.String.

Также следует учитывать, что вы хотите, чтобы произошлос:

ShowTypes<string>(null); // Will print System.String then explode

и

int? x = 10;
ShowTypes<int?>(x); // Will print System.Nullable<System.Int32>
                    // and then System.Int32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...