返回一个带有null项的元组
本文关键字:null 元组 一个 返回 | 更新日期: 2023-09-27 17:58:31
我有一些代码如下所示:
public Tuple<bool, SomeObjectModel> CheckIfJsonIsValid(string IncomingJson)
{
SomeObjectModel TheObjectModel = new SomeObjectModel();
JavascriptSerializer TheSerializer = new JavascriptSerializer();
.....
try
{
TheObjectModel = TheSerializer.Deserialize<SomeObjectModel>(IncomingJson);
}
catch
{
return new Tuple<bool, SomeObjectModel>(false, null); //question here
}
.....
return new Tuple<bool, SomeObjectModel>(true, TheObjectModel);
}
调用方法首先检查返回元组的Item1,如果为false,则结束其过程。
更好的做法是a)在元组中返回null值,还是b)返回SomeObjectModel的新实例?是否存在任何性能影响?
谢谢你的建议。
让我提出三种替代解决方案:
ParseJsonIfValid:如果反序列化有效,则TheObjectModel始终为非null。因此,不需要布尔值:
public SomeObjectModel ParseJsonIfValid(string IncomingJson)
{
JavascriptSerializer TheSerializer = new JavascriptSerializer();
.....
try
{
return TheSerializer.Deserialize<SomeObjectModel>(IncomingJson);
}
catch
{
return null;
}
}
在调用函数中,只需检查返回值是否为null。
ParseJson:如果JSON通常是有效的,而无效的JSON是出现严重错误的迹象,那么只需抛出一个异常:
public SomeObjectModel ParseJson(string IncomingJson)
{
JavascriptSerializer TheSerializer = new JavascriptSerializer();
.....
try
{
return TheSerializer.Deserialize<SomeObjectModel>(IncomingJson);
}
catch (Exception e)
{
throw new TheServerSentRubbishException(e);
}
}
请确保包含内部("real")异常,这样调用函数就可以记录错误的真正原因,以便进行调试。
TryParseJson:如果null
可以是有效的反序列化,则可以使用以下模式,其优点是与.NET框架的TryParse
方法一致:
public bool TryParseJson(string IncomingJson, out SomeObjectModel theObjectModel)
{
JavascriptSerializer TheSerializer = new JavascriptSerializer();
.....
try
{
theObjectModel = TheSerializer.Deserialize<SomeObjectModel>(IncomingJson);
return true;
}
catch (Exception e)
{
return false;
}
}