Создание массива неизвестного типа. C # - PullRequest
5 голосов
/ 29 марта 2011

При использовании отражения в C # ожидается, что вы передадите объект [] параметров, приведенных позже, у меня есть графический интерфейс, который позволяет пользователю вводить значения параметров. Я знаю, какой тип ввода они представляют ожидается ввод, int, string, float, экземпляр пользовательского объекта и т. д. ... В случае если аргумент является массивом некоторого типа, int [] foo [], он позволяет пользователю создать массив этого типа, и добавить / удалить элементы.

Чего я не знаю, так это как я могу использовать информацию (я знаю, что тип данных - это тип t). Как я могу построить массив t [], чтобы при его вызове он мог преобразовать к этому типу массива.

Например, прямо сейчас, если у меня есть функция, для которой в качестве аргумента требуется массив целых чисел, я сейчас передаю объект [] с другим объектом [] внутри, который заполнен целыми числами, но вы не можете просто привести object [] to int [], поэтому вызов не удался.

Я не могу написать регистр переключателя, так как невозможно предсказать все возможные типы (например, экземпляры некоторого другого класса, определенного в загруженной DLL)

Ответы [ 2 ]

14 голосов
/ 29 марта 2011

Вы ищете Array.CreateInstance?Это полезно, если вы знаете только тип динамически .Если вы знаете это статически, но в рамках общего метода, вы можете просто использовать new T[10] или любое другое имя параметра типа.

1 голос
/ 29 марта 2011

Это не отвечает на вопрос, но я чувствую, что это может быть совет, который стоит упомянуть.

Если это метод, который можно вызвать, передав массив int, а также массив object кажется, что вы реализуете поведение без типов, которое может быть выражено обобщениями.

Я предлагаю изменить его на обобщенный метод, используя IEnumerable<T>.Конечно, IEnumerable<T> не может быть доступен по индексу (в то время как массив может), но не уверен, что это то, что вам действительно нужно.

В сочетании с MakeGenericType , это может дать вам гибкостьтебе нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...