Приведение system.array к объекту в c # - PullRequest
0 голосов
/ 21 ноября 2011

моя функция имеет следующую подпись

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 является объектом ... так почему я получаю эту ошибку? Отличается ли объект от объекта?

Ответы [ 3 ]

5 голосов
/ 21 ноября 2011

Проблема, с которой вы сталкиваетесь, состоит в том, что, хотя массив является объектом, объект не является массивом, поэтому в вашей функции, если ваш массив можно передать в качестве объекта ref, массиву можно назначить все, объект.

Edit:

Чтобы решить эту проблему, объявите переменную ref для использования вместо переменной массива:

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

object referenceObject = arr;

myfunction( ref referenceObject );
3 голосов
/ 21 ноября 2011

Думайте о 'ref 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; это довольно необычный тип параметра для получения инициализированного массива.

1 голос
/ 21 ноября 2011

Объявите переменную как объект, а не как массив.Чтобы заполнить массив значениями, вы должны сохранить переменную массива и объявить другую, чтобы передать ее методу.

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

// Update the original reference
myArray = myObject as Array;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...