C# 如果可能,如何使方法的返回值可选?

C# 如果可能,如何使方法的返回值可选?,c#,.net,winforms,methods,return-value,C#,.net,Winforms,Methods,Return Value,我有一个方法private static DataTable ParseTable(HtmlNode table),有时候这个方法没有返回值,那么我想让返回值可选,可以吗 我试过使用if条件,但有错误 如果可能,我如何使返回值成为可选的方法?您可以始终返回null,以指示没有有意义的返回值。您不能使返回值成为可选的 您的两个选项是返回一个null或一个空的DataTable: return new DataTable(); 或: 哪一个是对的?这取决于您的应用程序逻辑以及您愿意在调用函数中执行

我有一个方法
private static DataTable ParseTable(HtmlNode table)
,有时候这个方法没有返回值,那么我想让返回值可选,可以吗

我试过使用
if
条件,但有错误


如果可能,我如何使返回值成为可选的方法?

您可以始终返回
null
,以指示没有有意义的返回值。

您不能使返回值成为可选的

您的两个选项是返回一个
null
或一个空的
DataTable

return new DataTable();
或:

哪一个是对的?这取决于您的应用程序逻辑以及您愿意在调用函数中执行多少
null
检查

更新:(以下评论)

这是如何有条件地返回(假设一个名为dataTable的变量):


这就是
null
的用途。通过返回
null
,您的方法可能不会返回任何对象

请记住,返回
null
可能会使调用方的事情复杂化,因为他们必须在使用返回的引用之前检查null,因此在某些情况下,最好返回一个

如果来电者需要表格

DataTable data;
ParseTable(table, out data);
如果不是

ParseTable(table);

编辑:我找不到如何实现可选的
out/ref
参数。因此,在
.NET4.0
之前,这可能是不可能的,或者完全不可能的。

如果您的方法被称为ParseTable,并且无法“解析”一个“表”,那么它应该抛出一个异常。这样做的好处是,异常可以向调用方提供有关其无法解析的原因的信息(html无效、意外列等)。返回null的问题是,意外的nullreference异常几乎从不告诉您问题的原因

让一个方法尝试解析一个表,但如果找不到结果,它却什么也不做,这种“正确”的方法是:

public bool TryParseTable(HtmlNode table, out DataTable result){
    // your code...
    if(success)
    {
        result = //the table you parsed
        return true;
    }
    else
    {
        result = null;
        return false;
    }
}

好的,所以调用此方法后“result”可能为null,但由于返回类型和方法名称,至少调用方更倾向于使用
if
语句。

@Oded,但是如何在if条件下编写返回语句,如if table get then return datatable else null?@Oded,好的,我想如果我们有条件地返回值,它会给出错误。谢谢……先生。@leppie:是的,我的想法行不通:(也许.NET4.0中的可选参数可以help@RobFonseca传感器,该方法的
out
in参数是什么?
DataTable data;
ParseTable(table, out data);
ParseTable(table);
public bool TryParseTable(HtmlNode table, out DataTable result){
    // your code...
    if(success)
    {
        result = //the table you parsed
        return true;
    }
    else
    {
        result = null;
        return false;
    }
}