我有一个方法private static DataTable ParseTable(HtmlNode table)
,有时这个方法没有返回值,然后我想让返回值可选,是否可能?
我尝试了if
条件。但是有错误。
如果可能,如何为方法选择返回值?
答案 0 :(得分:13)
您无法使返回值可选。
您的两个选项是返回null
或空DataTable
:
return new DataTable();
OR:
return null;
哪一个是对的?这取决于您的应用程序逻辑以及您在调用函数中愿意进行多少null
检查。
更新:(以下评论)
这是有条件地返回的方法(假设一个名为dataTable的变量):
if(gotTable)
{
return dataTable;
}
else
{
return null;
}
答案 1 :(得分:5)
这就是null
的用途。您的方法可能会返回null
而不返回任何对象。
请记住,返回null
可能会使调用者的事情变得复杂,因为他们必须在使用返回的引用之前检查null,因此在某些情况下返回Null Object可能更好。
答案 2 :(得分:4)
您总是可以返回null
来表示没有有意义的返回值。
答案 3 :(得分:2)
如果您的方法被称为ParseTable并且它“失败”“表”,那么它应该抛出异常。这样做的好处是异常可以给调用者提供有关它无法解析的原因的信息(html无效,意外的列等)。返回null的问题是,意外的空引用异常几乎从不告诉您问题的原因。
制作试图解析表格的方法的“正确”方法,但如果找不到结果则很乐意:
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
语句。
答案 4 :(得分:0)
private static void ParseTable(HtmlNode table, out DataTable data)
{
// do the parse, fill bool gotTable
data = gotTable ? new DataTable() : null;
}
private static void ParseTable(HtmlNode table)
{
ParseTable(table, out null);
}
如果来电者需要表
DataTable data;
ParseTable(table, out data);
如果不是
ParseTable(table);
编辑:我找不到如何实现可选的out/ref
参数。所以,在.NET 4.0
或完全不可能之前,这可能是不可能的。