Создать метод с параметром params ref T - PullRequest
2 голосов
/ 02 ноября 2011

Это то, что у меня есть в проекте, включая довольно сложные случаи отражения:

static int PopulateValues<T>(List<string> propertyNames, ref T list) { /*...*/ }

// Example call:
PopulateValues(propertyNames, ref list1);

Я бы очень хотел добавить params и сделать params ref T[] lists, чтобы разрешить использование:

PopulateValues(propertyNames, ref list1, ref list2, ...);

Однако, это дает мне следующую ошибку:

Параметр не может иметь модификаторы 'params' и 'ref'.

Моей первоначальной мыслью было позволить list быть object[], но использование было бы уродливым (приведение object). Поэтому сейчас я вызываю метод один раз для каждого типа, выполняя ненужные множественные перечисления.

решено: мне не нужно ref для вызова методов отражения в классе параметров (SetValue, GetValue, InvokeMember и т. Д.), Что означает, что я могу пропустить ref в целом. Действительно, я должен был это попробовать.

Ответы [ 3 ]

2 голосов
/ 02 ноября 2011

Вкл. ref + params:

Участник не может быть ссылкой.А поскольку params преобразует каждый параметр в элемент массива, это невозможно.

Единственное, о чем я могу думать, это вручную создать несколько перегрузок.


Но в вашемВ случае, если я не понимаю, зачем вам нужен ref.Чтобы добавить участников в список, вам не нужно изменять саму ссылку, и, следовательно, не нужно передавать ее в первую очередь моему реф.

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

params на самом деле массив;поэтому просто сделайте его параметром массива (T[], нет ref) и просто измените значения перед возвратом.Это самый близкий вам случай в общем случае.Пример:

Foo[] values =....
SomeMethod(values);
// now look at values[n] etc
0 голосов
/ 02 ноября 2011

Это невозможно с синтаксисом C #.Кроме того, я не могу себе представить, как это будет работать.Вы получаете свой массив, но затем установка элемента в нем установит эталонное значение?

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