Во-первых, вы псевдокод должен работать.Но прежде чем мы перейдем к этому, здесь есть три вещи: типы значений, ссылочные типы и ключевое слово «ref».
Типы значений - это, как правило, простые базовые типы, такие как int, double и т. Д.Строка странная, так как она считается типом значения.
Более сложные типы, такие как массивы и классы, являются ссылочными типами.
Когда вы передаете типы значений, такие как int и double, вы получаетеПередача копии значения, так что если вы передадите int x = 10 в метод, изменение x в методе не будет отражено после выхода из метода.С другой стороны, если вы передадите MyClass class1, любые изменения свойств в class1 будут отражены за пределами функции.Только не пытайтесь создать новый class1 внутри вашего метода, потому что он не изменится вне вызывающей стороны.
Если вы хотите изменить тип значения внутри метода, вы передаете ref.Если вы хотите создать новый класс или массив, то передайте ссылку.
Еще одна вещь: это не то, что черно-белое между использованием out и ref.Вы бы использовали, только если дизайн метода всегда создавал ваш класс или массив только внутри метода.Вы бы использовали ref для ссылочного типа, если хотите разрешить возможность создания нового объекта.Например,
//function definition
void foo (ref string[] temp)
{
if(temp == null)
{
temp = new string[] { "Hello World ", "You must be updated now" };
}
else
{
// do something with the existing temp
}
}
Наконец, если это ваш настоящий код:
string[] temp = null;
foo(ref temp);
foreach (string s in temp)
System.Console.WriteLine(s);
Позже:
//function definition
void foo (ref string[] temp)
{
temp = new string[] { "Hello World ", "You must be updated now" };
}
Тогда это должно действительно сработать.