c# - я должен использовать “касательно” передать набор (например, Список) в отношении метода?

Я должен использовать "касательно" передать переменную списка в отношении метода?

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

36
задан Greg 13 August 2010 в 02:52
поделиться

3 ответа

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

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

27
ответ дан 27 November 2019 в 05:25
поделиться

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

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

10
ответ дан 27 November 2019 в 05:25
поделиться

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

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
}
58
ответ дан 27 November 2019 в 05:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: