2014-12-04 83 views
-1

我有一个从接口IX实现的类;将基础对象的集合转换为子对象的集合

interface IX 
{ 
    Type t; 
    int id; 
} 
class X : IX 
{ 
    public string x; 
    public string y; 
    public string z; 
} 

我收到了IX []的集合。我想写一个通用的代码,我可以将类型转换为所需的对象,如X到X []的集合。

+1

你的代码是格式错误入手,仍然是无效的,因为你不能声明在接口领域。请提供一个*完整的*例子。此外,请解释您是否确实需要数组(或者您的示例)或其他集合类型。 – 2014-12-04 07:15:52

+0

这些字段基本属性。我得到一个类型的接口数组。为了得到一个对象X我需要投射数组中的每一项。所以我需要一个通用的方式来做到这一点。 – Crispin 2014-12-04 07:20:09

+0

如果它们是为了属性,你应该*显示*它们作为属性......如果你的问题是针对数组的,你应该*说*它特定于数组而不仅仅是集合。接下来,什么是创建数组?它实际上是一个'X []',但是你将它作为一个'IX []'来呈现吗?你甚至知道每个元素都是'X'引用?铸造有什么问题?这里有很多上下文缺失 - 请阅读http://tinyurl.com/stack-hints – 2014-12-04 07:25:07

回答

0

你可以使用linq。

IX[] IXes; 
// populating IXes here... 
X[] Xes; 
Xes = IXes.Cast<X>().ToArray(); 

这个过程一般方法将看起来像

static TClass[] Cast<TInterface, TClass>(TInterface[] a) where TClass : TInterface 
{ 
    return a.Cast<TClass>().ToArray(); 
}