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

时间:2009-05-14 08:32:20

标签: c# .net tryparse

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

为了取悦编译器,我应该只将result = result放入?我错过了什么吗?

6 个答案:

答案 0 :(得分:7)

分配null(或更普遍的默认(T))。你必须指定一个值,即'out'的含义。

答案 1 :(得分:6)

您对result = result的建议不起作用,因为它是一个out参数 - 它没有明确指定开头,所以在你<之前你无法读取它的值/ em>为其分配了一个值。

result = null;

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

编辑:根据Boris的评论,可能值得详细说明ref参数与out参数之间的差异:

输出参数

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

参考参数

  • 必须由来电者明确指定
  • 在方法开头被视为“明确分配”(因此您可以在不先指定值的情况下读取值)
  • 不必在方法中指定(即您可以保留参数的原始值)

答案 2 :(得分:2)

result = null;

答案 3 :(得分:0)

只需输入一些默认值即可。例如,Int32.TryParse方法为零。

答案 4 :(得分:0)

如果您不想分配值,可以使用ref而不是out,尽管这必须由调用者初始化。

答案 5 :(得分:-3)

您可以在应该设置结果的代码之前抛出异常。