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;
}
}