返回一个带有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的新实例?是否存在任何性能影响?

谢谢你的建议。

返回一个带有null项的元组

让我提出三种替代解决方案:


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