Установить тип переменной из метода с параметром типа переменной - PullRequest
0 голосов
/ 13 июня 2018

По сути, у меня есть класс Text с набором свойств.

Я хочу заполнить их свойствами из других классов.

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

Что у меня есть и работает:

private Text SetText(Book book)
{
 return new Text{
  Media = book.GetType().ToString();
  Pages = book.Pages,
  Words = book.Words,
}
private Text SetText(Letter letter)
{
 return new Text{
  Media = letter.GetType().ToString();
  Pages = letter.Pages,
  Words = letter.Words,
}

Теперь есть способ а) иметь 1метод, который работает как для Book и Letter, так и для b) автоматического заполнения страниц и слов, имея в виду, что и Letter, и Book также имеют другие свойства.

Так что-то вроде

private Text SetText<T>(T data)
{
 return new Text
  {
   Media = data.GetType().ToString(),
   Pages = data.Pages,
   Words = data.Words,
  }
}

Если бы на вопрос а можно было получить ответ, это помогло бы мне набрать тонну.

Если бы на вопрос б можно было получить ответ, это было бы хорошим бонусом.

1 Ответ

0 голосов
/ 14 июня 2018

«динамический» тип - это то, что нужно.

private Text GetText(object data)
    {
     dynamic objectData = Convert.ChangeType(data, data.GetType());
     return new Text
      {
       Media = objectData.GetType().Name,
       Pages = objectData.Pages,
       Words = objectData.Words,
      }
    }

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

...