所以我得到了这个方法:
private static T ParseXmlToArray<T>(XElement elem)
{
/* Setup the array with proper length */
var elemType = typeof(T).GetElementType();
var size = elem.GetCollectionLength();
var arr = Array.CreateInstance(elemType, size);
var index = 0;
/* Deserialize each item and add them to array */
foreach (var item in elem.Elements())
{
Type type;
if (item.TryGetType(out type))
{
var parameters = new object[] {item};
var result = typeof(Serializer).GenericMethodCall("ParseXmlToObjects", type, parameters);
arr.SetValue(Convert.ChangeType(result, type), index++);
}
}
//TODO: Cast array to T
return (T) arr; //Not allowed
return (T)(object) arr //Allowed and works
return default(T);
}
我正在尝试将System.Array arr转换为T,C#不允许我直接执行。然而,如果我首先将它投射到一个物体然后再投射到T它是允许的并且工作正常。我还没弄清楚原因。谁能告诉我为什么?还有什么方法可以做得更干净吗?