我有两种方法,像这样:这是C#铸造无用?
Foo[] GetFoos(Type t) { //do some stuff and return an array of things of type T }
T[] GetFoos<T>()
where T : Foo
{
return GetFoos(typeof(T)) as T[];
}
然而,这似乎总是返回null。我做错了什么或者这只是C#的一个缺点?
注: 我知道我可以解决这个问题:
GetFoos(typeof(T)).Cast<T>().ToArray();
不过,我宁愿做这个wothout任何分配(在垃圾收集非常敏感的环境中工作)。
铌++: 奖励积分,如果你认为一个可选的非分配解决方案
编辑: 这就提出了一个有趣的问题。 MSDN文档如下:http://msdn.microsoft.com/en-us/library/aa664572%28v=vs.71%29.aspx表示如果存在隐式或显式强制转换,则强制转换将成功。在这种情况下,有明确的演员阵容,所以演员阵容应该成功。 MSDN文档是否错误?
当你这样做会发生什么:'(T [])GetFoos(typeof运算(T))' – Will 2011-04-25 02:17:40
请问:'InvalidCastException'。如果'as'返回'null',则直接投射将不会成功。 – Femaref 2011-04-25 02:18:57
'GetFoos()'实现被锁定,你不能改变它?可能最理想的情况是(除了使用泛型),如果它返回一个非特定的'Array'。然后它可以返回一个这种类型的东西,你可以安全地将它转换为你需要的类型。 – 2011-04-25 02:32:31