Подтвердить что ты не робот

С# - следует ли использовать "ref" для передачи коллекции (например, List) ссылкой на метод?

Должен ли я использовать "ref" для передачи переменной списка по ссылке на метод?

Является ли ответ "ref" не нужен (поскольку список будет ссылочной переменной), однако для удобства чтения читайте "ref" ?

4b9b3361

Ответ 1

Нет, не используйте ref, если вы не хотите изменять список, на который ссылается переменная. Если вы хотите просто получить доступ к списку, сделайте это без ссылки.

Если вы сделаете параметр ref, вы говорите, что вызывающий должен ожидать, что параметр, который они передают, может быть назначен другому объекту. Если вы этого не делаете, то он не передает правильную информацию. Вы должны предположить, что все разработчики С# понимают, что ссылка на объект передается.

Ответ 2

Словарь является ссылочным типом, поэтому невозможно передать по значению, хотя ссылки на словарь являются значениями. Позвольте мне прояснить это:

void Method1(Dictionary<string, string> dict) {
    dict["a"] = "b";
    dict = new Dictionary<string, string>();
}

void Method2(ref Dictionary<string, string> dict) {
    dict["e"] = "f";
    dict = new Dictionary<string, string>();
}

public void Main() {
    var myDict = new Dictionary<string, string>();
    myDict["c"] = "d";

    Method1(myDict);
    Console.Write(myDict["a"]); // b
    Console.Write(myDict["c"]); // d

    Method2(ref myDict); // replaced with new blank dictionary
    Console.Write(myDict["a"]); // key runtime error
    Console.Write(myDict["e"]); // key runtime error
}

Ответ 3

Вам не нужно ref в вашем сценарии, и это не поможет с удобочитаемостью.

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