Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “一个”应该是什么;“出去”;参数在发生故障时是否可用?_C#_.net_Null_Software Design - Fatal编程技术网

C# “一个”应该是什么;“出去”;参数在发生故障时是否可用?

C# “一个”应该是什么;“出去”;参数在发生故障时是否可用?,c#,.net,null,software-design,C#,.net,Null,Software Design,我读过这个相关的问题: 然而,这个问题涉及诸如整数等基本类型 我正在实现一个类似的TryXXX,该问题的答案是,当方法不成功时,out的默认值应该是null。但是,我的方法中的out类型是不可为空的值类型 以我的代码为例: public bool TryParseFileLine(string fileLine, out FileResult result) { if(!string.IsNullOrWhiteSpace(fileLine)) {

我读过这个相关的问题:

然而,这个问题涉及诸如整数等基本类型

我正在实现一个类似的
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
行未编译,因为
无法将null转换为“FileResult”,因为它是不可为null的值类型

那么在我的情况下,当方法失败时,
result
的值应该是多少?理想情况下,我希望它是空的,因为这对我来说是最有意义的

编辑:在这里使用
Nullable
是个好主意吗?例如:

        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();
    }
public bool TryParseFileLine(字符串文件行,输出可为null的结果)
{
如果(!string.IsNullOrWhiteSpace(文件行))
{
结果=空;
返回false;
}
//这里的逻辑用于判断字符串是否为空等。
结果=新文件结果();
}
当方法失败时,结果的值应该是多少

您只需使用
default(FileStruct)

这将为您提供一个带有默认值的
FileStruct
。但是您不会在意它,因为您只在返回
false
时执行此操作,因此不希望调用方使用此值

当方法失败时,结果的值应该是多少

您只需使用
default(FileStruct)


这将为您提供一个带有默认值的
FileStruct
。但是您不会在意它,因为您只在返回
false
时才这样做,因此调用方不需要使用此值。

根据经验,可以使用
default(FileStruct)
(并确保该值具有某种意义-对于值类型,它相当于
newfilestruct()
),或者更好的方法是,
参数划掉
并返回一个可为空的
FileStruct?

public FileResult? TryParseFileLine(string fileLine)
{
    if (string.IsNullOrWhiteSpace(fileLine))
        return null;

    ...
}
bool TrySomething(out Result)
模式早于language中的可空结构,IMHO不应用于新代码,因为它使调用方不方便(因为大多数时候需要声明额外的变量)。

使用可为空的结构作为返回值对调用方来说更好,并且不需要您在代码中返回无意义的值。

根据经验,可以使用
default(FileStruct)
(并确保该值具有某种意义-对于值类型,它相当于
newfilestruct()
),或者更好,划掉
参数
并返回一个可为空的
FileStruct?

public FileResult? TryParseFileLine(string fileLine)
{
    if (string.IsNullOrWhiteSpace(fileLine))
        return null;

    ...
}
bool TrySomething(out Result)
模式早于language中的可空结构,IMHO不应用于新代码,因为它使调用方不方便(因为大多数时候需要声明额外的变量)。

使用可为空的结构作为返回值对调用方来说更好,并且不需要您在代码中返回无意义的值。

是否可以在此默认值上再扩展一点?我以前只在开关上使用默认值。我试着用TryParse的工作方式来处理out参数。我没有考虑返回一个可为空的类型。这通常是我想要实现的现代方法吗?@user9993是一个主要用于泛型的构造,它返回引用类型的
null
,返回值类型的默认值,这是通过调用默认构造函数得到的:
new T()
。我认为可空值类型使得
TryParse
模式在很大程度上已经过时,现有函数可以追溯到.NET1.0。你应该尽可能避免
out
。你能在这个默认值上再扩展一点吗?我以前只在开关上使用默认值。我试着用TryParse的工作方式来处理out参数。我没有考虑返回一个可为空的类型。这通常是我想要实现的现代方法吗?@user9993是一个主要用于泛型的构造,它返回引用类型的
null
,返回值类型的默认值,这是通过调用默认构造函数得到的:
new T()
。我认为可空值类型使得
TryParse
模式在很大程度上已经过时,现有函数可以追溯到.NET1.0。你应该尽可能避免
out