有时会返回一个对象,有时会返回该对象的序列化

时间:2012-02-02 10:19:17

标签: c#

我有两种非常相似的方法。

public string GetMyObjectInJson(parameters)
{
 MyObject TheObject = new MyObject(); 
 ...lots of work here
 Javascript Serializer = new Javascript Serializer();
 return Serializer.serialize(TheObject); 
}

public MyObject GetMyObject(parameters)
{
 MyObject TheObject = new MyObject(); 
 ...lots of work here
 return TheObject; 
}

我应该如何重写它,以便我只有一个方法可以返回2种不同的类型:有时是字符串,有时是对象。

感谢。

1 个答案:

答案 0 :(得分:2)

你不应该。你应该有两种方法,这样就可以从调用代码中清楚地知道你想要什么以及你会得到什么。

但是,您可以使用一种方法完成大部分工作:

public string GetMyObjectInJson(parameters)
{
    MyObject object = GetMyObject();
    Javascript Serializer = new JavascriptSerializer();
    return Serializer.serialize(TheObject); 
}

public MyObject GetMyObject(parameters)
{
     MyObject TheObject = new MyObject(); 
     ...lots of work here
     return TheObject; 
}

但是,这表明实际上 MyObject类应该有SerializeToJson方法,因此调用者会写:

string json = foo.GetMyObject().SerializeToJson();

请注意,即使您无法将一个方法直接链接到另一个方法,也可以使用一个包含公共工作的私有方法,该方法将从两个公共方法中调用。当你可以重构你的实现时,你不应该使你的公共API不那么清晰。