C# Stati c метод модификации объекта - PullRequest
2 голосов
/ 15 января 2020

Представьте себе что-то вроде этого ...

public class Result
{
    public string Name {get; set;}

    public int Score {get; set;}

    public bool Pass {get; set;}
}

И метод c stati ...

public static Result SetPass(this Result result)
{
    result.Pass = result.Score > 50;

    return result;
}

Мой вопрос: должен ли я вернуть результат или это уже модифицировано на месте? Могу ли я сделать возвращаемый тип недействительным, а затем выполнить итерацию по коллекции результатов и внести изменения на месте следующим образом ...

foreach (var result in results)
{
    result.SetPass();
}

или мне нужно вернуть объект результата и переназначить его?

1 Ответ

7 голосов
/ 15 января 2020

Поскольку Result является классом , в настоящее время он изменяется на одном объекте - по существу на месте; это передает ссылку по значению. Таким образом, здесь нет смысла возвращать значение.

Если бы Result было struct , вам нужно было бы либо вернуть новое значение, или использовать (ref this Result result) (чтобы оно передавало значение по ссылке); обратите внимание, что компилятор мягок в этом случае и позволяет использовать в этом сценарии неявность ref (в этом случае ref обычно должен быть явным как для вызывающей, так и для вызываемой стороны).

...