Как получить тип свойства передается в T в C #? - PullRequest
2 голосов
/ 06 февраля 2011

Хорошо,

Вот что я делаю, у меня есть класс под названием Настройки
В настройках есть список свойств:

Я пытаюсь сделать его максимально динамичным.
Так что я могу просто скопировать и вставить каждое свойство и просто изменить его имя и он захватит новую настройку с именем

Пример ..

public string Url
{ get { return Get<string>(MethodBase.GetCurrentMethod()); } }
public int Port
{ get { return Get<int>(MethodBase.GetCurrentMethod()); } }

private T Get<T>(MethodBase method)
{
  // Code that pulls setting from the property name
}

Вопрос в том, как я могу передать тип свойств в Get, чтобы мне не приходилось указывать тип данных дважды.

Я знаю, что это неправильно, но вроде как

Get<MethodBase.GetCurrentMethod().GetType()>(MethodBase.GetCurrentMethod());

Ответы [ 2 ]

3 голосов
/ 06 февраля 2011

Невозможно определить тип возврата; Вы не можете сделать это, используя дженерики.

Если Get не использует typeof(T), вы можете изменить его на возвращение dynamic вместо использования обобщений. Затем вызывающая сторона может неявно привести результат в свой оператор return.

Однако может быть снижение производительности.

0 голосов
/ 06 февраля 2011

Вы не можете сделать что-то вроде

Get<MethodThatReturnsAType()>

, потому что универсальный тип устанавливается во время компиляции.Мне интересно, какое преимущество вы получаете здесь.Вы можете получить Get просто вернуть объект и управлять приведением в свойстве.

Какое поведение вы ожидаете, если параметр отсутствует, например, или определен, но неправильный тип?

...