在c#中将system.array转换为object

时间:2011-11-21 19:07:36

标签: c# casting

我的功能有以下签名

function myfunction(ref object)

我这样使用

 Array arr = Array.CreateInstance(System.Type.GetType("System.String"), 2);
  arr.SetValue("1", 0);

  myfunction( ref arr);

我正在

  

“无法将'ref System.Array'转换为'ref object'”

我的印象是System.Array是对象...所以我为什么会收到此错误?对象与Object不同吗?

3 个答案:

答案 0 :(得分:5)

你遇到的问题是,当一个数组是一个对象时,一个对象不是一个数组,所以在你的函数中,如果你的数组可以作为ref对象传入,那么可以为数组分配任何数组。一个对象。

修改

要解决此问题,请声明一个ref变量来代替数组变量:

Array arr = Array.CreateInstance(System.Type.GetType("System.String"), 2);
arr.SetValue("1", 0);

object referenceObject = arr;

myfunction( ref referenceObject );

答案 1 :(得分:3)

将'ref object'想象为“我引用了一个可以存储Object的变量”。假设'myfunction'试图将'int'存储到你传递的变量中?这会在运行时失败,这是不可取的。

另外,您可以使用typeof(string)代替调用GetType(“System.String”)。你也可以说:

Object arr = new string[2];

要首先访问阵列,您可以这样做:

string[] arr = new string[2];
arr[0] = "1";
object arrObj = arr;
myfunction(ref arrObj);

我会仔细检查你是否正确使用myfunction方法;这是一个非常不寻常的参数类型,用于获取初始化数组。

答案 2 :(得分:1)

将变量声明为对象而不是数组。 要使用值填充数组,您应该保留数组变量并声明另一个数组以将其提供给方法。

Array myArray = ....;
Object myObject = myArray;
myFunction(ref myObject);

// Update the original reference
myArray = myObject as Array;