Из документов :
В C # 7.0 отбрасывания поддерживаются в следующих назначениях
контексты:
Деконструкция кортежей и объектов.
Сопоставление с шаблоном is
и switch
.
Вызов методов с параметрами out
.
Автономный _
, когда нет _
в области видимости.
int.TryParse
явно ожидает out
-параметр. Оператор, на которого вы ссылаетесь, не меняет этого.
Помимо этого ref
подразумевает, что значение уже было инициализировано до некоторого значения для использования его в методе. Таким образом, ref
эффективно используется, когда вам нужно предоставить значение и изменить его впоследствии, тогда как out
просто ничего не делает с предоставленным значением, оно просто возвращает его. Вот почему вам нужно инициализировать переменную, переданную ref
, где вам не нужно делать это для out
-параметра.
Другими словами. Если у вас есть метод, который ожидает ref
-параметр, вы можете использовать предоставленное значение и использовать его в своем методе:
void DoSomething(ref int i)
{
var a = i + 1;
i = a;
}
Это, очевидно, предполагает, что i
имеет установленное значение.
С другой стороны, вы не можете ничего сделать 1044 * со значением, переданным как out
внутри метода:
void DoSomething(out int i)
{
var a = i + 1; // won´t compile because i has not been set
i = a;
}
Так почему оператор, на которого вы ссылаетесь, не работает для ref
? Это просто то, что я сказал выше: использование ref
предполагает, что вы инициализировали значение перед его передачей. Однако вы не можете инициализировать отброшенную переменную .