Передать бесконечные параметры по ссылке (используя ключевые слова params и ref вместе)
Можно ли передать бесконечное количество параметров в мою функцию по ссылке?
Я знаю, что это не правильно, но есть ли способ сделать это?
private bool Test(ref params object[] differentStructures)
{
//Change array here and reflect changes per ref
}
TestStructOne test1 = default(TestStructOne);
TestStructTwo test2 = default(TestStructTwo);
TestStructOne test3 = default(TestStructOne);
if (Test(test1, test2, test3)) { //happy dance }
Я знаю, что мог бы сделать следующее, но я надеюсь избавиться от необходимости создавать дополнительную переменную, которая будет содержать все объекты...
private bool Test(ref object[] differentStructures)
{
//Change array here and reflect changes per ref
}
TestStructOne test1 = default(TestStructOne);
TestStructTwo test2 = default(TestStructTwo);
TestStructOne test3 = default(TestStructOne);
object[] tests = new object[] { test1, test2, test3 };
if (Test(ref tests)) { //simi quazi happy dance }
1 ответ
Решение
Таким образом, простой ответ - нет, у вас не может быть метода, возвращающего бесконечное число ссылок.
Какая польза от такой функции? Очевидно, вам нужен метод, который может изменить любой объект, независимо от того, откуда он и кто его использует. Это вряд ли является нарушением принципа единой ответственности класса, превращая его в объект Бога.
Однако вы можете создать экземпляры в перечислении:
private bool Test(object[] differentStructures)
{
differentStructures[0] = someOtherRessource;
differentStructures[1] = anotherDifferentRessource
differentStructures[2] = thirdDifferentRessource
}
И назовите это как:
var tests = new[] {
default(TestStructOne),
default(TestStructTwo),
default(TestStructOne)
}
Test(tests);
Что приведет к следующему:
tests[0] = someOtherRessource;
tests[1] = anotherDifferentRessource
tests[2] = thirdDifferentRessource