我正在实现一个 TryParse(string s, Out object result) 方法。如果解析失败,我不想触及 out 参数,因此任何先前的结果都将保持不变。但是VS2k8不会让我。无论如何,我都必须设置 out 对象的值。
为了取悦编译器,我应该只放 result = result 吗?我错过了什么吗?
分配 null (或更一般的 default(T) )。您必须分配一个值,这就是“出”的意思。
您的建议result = result
不起作用,因为它是一个参数 - 它并不是从一开始就明确分配的,因此在您为其分配值之前,您out
无法读取它的值。
result = null;
绝对是获取object
out 参数的正确方法。基本上用于您拥有default(T)
的任何类型。T
(该default
运算符在泛型方法中很有用——对于非泛型代码,我通常只使用null
, 0 等。)
编辑:根据鲍里斯的评论,可能值得详细说明ref
参数和out
参数之间的区别:
输出参数
参考参数
result = null;
只需输入一些默认值。例如 Int32.TryParse 方法置零。
You could use ref instead of out if you don't want to assign a value, although this must then be initialised by the caller.
您可以在应该设置结果的代码之前抛出异常。