我正在实现TryParse(string s,Out对象结果)方法。 如果解析失败,我不想触摸out参数,因此任何先前的结果将保持不变。 但VS2k8不会让我。无论如何,我都必须设置out对象的值。
为了取悦编译器,我应该只将result = result放入?我错过了什么吗?
答案 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)
您可以在应该设置结果的代码之前抛出异常。