使用带有变量类型参数的方法将类型设置为变量

时间:2018-06-13 11:17:02

标签: generics methods dynamic parameters properties

基本上,我有一个带有一组属性的Text。

我想用其他类的属性填充它们。

我可以使用方法重载,但由于我基本上做了多次完全相同的事情,所以在一种方法中做它似乎更清晰。

我拥有和工作的东西:

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,
}

现在有办法a)有一种方法可以同时适用于Book和Letter,b)可以自动填写页面和单词,请记住,Letter和Book也有其他属性。

类似

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

如果问题可以得到回答,那将有助于我减轻成本。

如果问题b得到回答,这将是一个很好的奖励。

1 个答案:

答案 0 :(得分:0)

“动态”类型是需要的。

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,
      }
    }

这是有效的,因为它只在运行时运行,因此允许动态输入。