2016-10-03 4 views
0

Я хотел бы передать множество аргументов методу по ссылке, но я не знаю количества аргументов.Можно ли передавать объекты ref с помощью ключевого слова params?

Я пытался что-то вроде этого, но это не работает: D:

public void myMethod(ref params object args) 

Я думаю, чтобы передать указатели в PARAMS, но это немного сложно в C#:/

Возможный обходной путь?

EDIT:

Я хочу, чтобы инкапсулировать часть кода, в основном, как это:

....

var collectionA = new List<string>(); 
var myObject = // an object 
Optimizer.Optimize(ref collectionA, ref myObject); // cache 
//{ 

MaClass.Treatment(); // use collectionA stored in cache via Optimizer 

// the collectionA is modified in MaClass.Treatment() 
... 

//} 
Optimizer.EndOptimize(); 
... 

Цель не может запросить мой сервер все время для то же обращение (HTTPRequest), если вызов был инкапсулирован в мой оптимизатор

+0

Вы действительно хотите передать их по ref? Вы пытаетесь назначить новые объекты в методе? Или это примитивные типы, которые вы присваиваете новым значениям? Если ответ на оба вопроса «нет», вам, скорее всего, не нужно будет переходить по ссылке. –

ответ

2

Нет, это невозможно. Тем не менее, вы можете получить много того же путем мутирования массива в методе, а затем просто читать значения обратно из массива на вызывной сайте:

var args = new[] {x, y, z} 
obj.myMethod(args); 
x = args[0]; 
y = args[1]; 
z = args[2]; 

(который может быть тривиальным обобщенным к количество аргументов, известных только во время выполнения)

+0

Отлично! это не лучшее решение для моего кода, но я не знал этого трюка, спасибо вам @MarcGravell – Adwelean