使用不成功的TryXX()方法应该将out值设置为什么?

Bor*_*ens 2 .net c# tryparse

我正在实现一个TryParse(字符串s,Out对象结果)方法.如果解析失败,我不想触摸out参数,因此任何先前的结果将保持不变.但VS2k8不会让我.无论如何,我必须设置out对象的值.

我是否应该为了取悦编译器而放置result = result?我错过了什么吗?

Bri*_*ian 7

分配null(或更一般地指定默认值(T)).你必须分配一个值,这就是'out'的含义.


Jon*_*eet 6

你的建议result = result不起作用,因为它是一个out参数 - 它没有明确地分配给你开始,所以在给它赋值之前不能读它的值.

result = null;
Run Code Online (Sandbox Code Playgroud)

绝对是object出去参数的正确方法.基本上default(T)用于T你所拥有的任何类型.(default运算符在泛型方法中很有用 - 对于我通常只使用的非泛型代码null,0,无论如何.)

编辑:根据鲍里斯的评论,可能值得详细说明ref参数和out参数之间的区别:

输出参数

  • 不必由呼叫者明确分配
  • 在方法的开头被视为"未明确分配"(如果不首先分配值,则无法读取值,就像局部变量一样)
  • 必须在方法正常终止之前(通过方法)明确分配(即在它返回之前;它可以抛出异常而不为参数赋值)

参考参数

  • 难道必须由主叫方被明确赋值
  • 在方法的开头被视为"明确分配"(因此您可以在不先分配值的情况下读取值)
  • 不必在方法中分配(即您可以保留参数的原始值)