发生故障时,“out”参数应该是什么
本文关键字:参数 是什么 out 故障 | 更新日期: 2023-09-27 18:30:37
我已经阅读了这个相关问题:使用不成功的 TryXX() 方法应该将 out 值设置为什么?
但是,该问题涉及原始类型,例如整数等。
我正在实现一个类似的TryXXX
,关于这个问题的答案说,当方法不成功时,out
的默认值应该null
。但是,我的方法中的out
类型是不可为空的值类型。
以我的代码为例:
public bool TryParseFileLine(string fileLine, out FileResult result)
{
if(!string.IsNullOrWhiteSpace(fileLine))
{
result = null;
return false;
}
// Logic here for if the string wasn't empty etc.
}
public struct FileResult
{
public bool IsValid;
public string Value;
}
result = null
行无法编译,因为Cannot convert null to 'FileResult' because it is a non-nullable value type
.
那么在我的情况下,当方法失败时,result
的值应该是多少?理想情况下,我希望它是空的,因为这对我来说最有意义。
编辑:在这里使用Nullable<FileResult>
是个好主意吗?例如:
public bool TryParseFileLine(string fileLine, out Nullable<FileResult> result)
{
if(!string.IsNullOrWhiteSpace(fileLine))
{
result = null;
return false;
}
// Logic here for if the string wasn't empty etc.
result = new FileResult();
}
根据经验,要么使用 default(FileStruct)
(并确保该值具有某种意义 - 它相当于值类型的 new FileStruct()
),要么更好的是,完全划伤 out
参数并返回可为空的 FileStruct?
值。
public FileResult? TryParseFileLine(string fileLine)
{
if (string.IsNullOrWhiteSpace(fileLine))
return null;
...
}
bool TrySomething(out Result result)
模式早于语言中的可为空结构,恕我直言,不应将新代码用于新代码,因为它使调用者不方便(因为大多数时候需要声明一个额外的变量)。
使用可为 null 的结构作为返回值对调用方来说要好得多,并且不需要在代码中返回无意义的值。
当方法失败时,结果的值应该是多少?
您可以简单地使用 default(FileStruct)
.
这将为您提供具有默认值的FileStruct
。但是您不会关心它,因为您仅在返回false
时才执行此操作,因此调用方不应使用此值。