将Guid数组转换为Object数组

时间:2012-11-27 14:37:14

标签: c# .net

为什么

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。

3 个答案:

答案 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)

GUIDobject,但GUID[]不是object[],您必须向上转换数组中的每个元素