我的功能有以下签名
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不同吗?
答案 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;