Generics 使用变量类型的参数从方法将类型设置为变量

Generics 使用变量类型的参数从方法将类型设置为变量,generics,methods,dynamic,parameters,properties,Generics,Methods,Dynamic,Parameters,Properties,基本上,我有一个类文本和一组属性 我想用其他类的属性来填充这些 我可以使用方法重载,但由于我基本上多次做完全相同的事情,所以用一种方法来做似乎更干净 我所拥有和工作的: private Text SetText(Book book) { return new Text{ Media = book.GetType().ToString(); Pages = book.Pages, Words = book.Words, } private Text SetText(Letter le

基本上,我有一个类文本和一组属性

我想用其他类的属性来填充这些

我可以使用方法重载,但由于我基本上多次做完全相同的事情,所以用一种方法来做似乎更干净

我所拥有和工作的:

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,
  }
}
private Text SetText(T数据)
{
返回新文本
{
Media=data.GetType().ToString(),
Pages=数据。Pages,
单词=数据。单词,
}
}
如果问题a能得到回答,那将对我大有帮助

如果问题b能得到回答,那将是一个不错的奖励。

需要的是“动态”类型

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,
      }
    }
这是因为它只在运行时运行,因此允许动态键入