出来了。_ 您可以想象这是返回值的另一种方式。return和out之间的显着区别在于您只能返回一个值,但可以返回不同数量的值。当您的方法需要输出多个值时,它特别有用,例如bool Dictionary<TKey, TValue>.TryGetValue(TKey key, out TValue value)
.
您看到的错误就像您声明一个返回值而不指定返回什么的方法时一样。必须在代码到达可到达端点之前分配 out 参数。编写一个为 out 参数赋值的语句是消除错误的常用方法:
public static void OutOfAssgnment<T>(out T value) {
value=default(T);
}
但事实上,至少还有三种其他方法可以使其编译:
public static void OutOfAnotherOut<T>(out T value) {
OutOfAnotherOut(out value); // not necessarily be recursive, just an example
}
public static void OutOfThrowing<T>(out T value) {
throw new Exception();
}
public static void OutOfInfiniteLoop<T>(out T value) {
for(; ; )
;
}
后两者不分配 out 参数的值,但使端点不可达也会编译。