为什么
var value = new Guid[]{};
var b = (object[])value;
结果
Cannot cast 'value' (which has an actual type of 'System.Guid[]') to 'object[]'
更新
抱歉不准确。真正的代码是:
private void SetEditors(object value)
{
var array = value as object[];
...
}
如果value是Guid数组,则数组为null。
答案 0 :(得分:4)
var b = value.Cast<object>().ToArray();
答案 1 :(得分:2)
回答“为什么”仅部分参考类型的数组是协变的。
所以你可以写:
string[] x = new string[10];
object[] y = x;
但你不能写:
int[] x = new int[10];
object[] y = x;
就我个人而言,我认为即使是第一个版本也是允许的,但这是一个不同的故事。
这在C#4规范(隐式参考转换)的第6.1.6节中有详细说明:
隐式参考转换是:
- ...
- 从具有元素类型S E 的数组类型S到具有元素类型T E 的数组类型T,提供以下所有条件:
- S和T仅在元素类型上有所不同。换句话说,S和T具有相同的维数。
- S E 和T E 都是参考类型。
- 从S E 到T E
存在隐式参考转换
答案 2 :(得分:1)
GUID
为object
,但GUID[]
不是object[]
,您必须向上转换数组中的每个元素