返回一个带有null项的元组

时间:2013-02-08 07:59:20

标签: c#

我有一些看起来像这样的代码:

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的新的新实例?是否有任何性能影响?

感谢您的建议。

1 个答案:

答案 0 :(得分:2)

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


ParseJsonIfValid :如果反序列化有效,则TheObjectModel始终为非null。因此,不需要布尔值:

public SomeObjectModel ParseJsonIfValid(string IncomingJson)
{
   JavascriptSerializer TheSerializer = new JavascriptSerializer();
   .....

   try
   {
       return TheSerializer.Deserialize<SomeObjectModel>(IncomingJson);
   }
   catch
   {
       return 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);
   }
}

确保包含内部(“实际”)异常,以便调用函数可以记录错误的真正原因以进行调试。


TryParseJson :如果null可以是有效的反序列化,则可以使用以下模式,其优势与{{1}一致.NET框架的方法:

TryParse