将未知类转换为具有指定接口的新类

时间:2014-08-30 02:53:39

标签: c# generics reflection anonymous-types expandoobject

我需要创建一个函数,它接受一个List和2个属性名称T,并返回一个满足指定接口要求和T的任何其他属性的列表。

例如

interface ITest
{
  int ID {get;set};
  int ParentID {get;set;};
}

Consumer有任何可转换为此接口但可能具有与接口所需属性不同的类:

public class ConsumingClass
{
  public int ConsumingClassID {get;set;
  public int ConsumingClassParentID {get;set;}
  public string namex {get;set;}
  public string namey {get;set;}
}

因此消费者需要获得满足接口要求的对象,因此他想调用如下函数:

List<ITest> getnewlist = ConvertList<ConsumingClass>(consuminglist, "ConsumingClassID", "ConsumingClassParentID");

该方法的签名如下所示:

public List<ITest> ConvertList<T>(List<T> ListBeingConverted, string IDAlias, string ParentIDAlias)
{
    //code needs to return a list meeting ITest requirements plus any other properties contained in T
}

编辑:我修改了签名,以更恰当地反映我希望返回的内容。

1 个答案:

答案 0 :(得分:1)

ITest派生,创建一个适应ConsumingClass实例以符合ITest界面的类:

class AnyObjectAsITest : ITest {
 public object Object;
 public string PropertyName;

 public int ID {
  get {
   return (int)Object.GetType().GetProperty(PropertyName).GetValue(Object, null);
  }
 }
 //...
}