我写了一个方法,将myEvent写入path参数提供的json文件。
而不是重载此方法并且有一个方法将MyEventObject作为第一个参数,第二个重载方法以List<MyEventObject>
作为第一个参数,我想知道我是否可以使用泛型&#34;对象&# 34;作为第一个参数?
方法内部的代码实际上是完全相同的代码,无论它是列表还是MyEventObject的单个对象。代码有效,但我想知道这是否是我的简单方法的最佳方法,以及在C#中完成这样的事情的最佳实践。
private void WriteEventsToFile(object myEvent, string path)
{
string eventObject = JsonConvert.SerializeObject(myEvent);
try
{
System.IO.File.WriteAllText(path, eventObject);
}
catch (Exception e)
{
Debug.WriteLine("System.IO.File.WriteAllText Exception : " + e.Message + "\nCall Stack : " + e.StackTrace);
throw e;
}
}
答案 0 :(得分:6)
而不是重载此方法并且有一个方法以
MyEventObject
作为第一个参数,第二个重载方法以List<MyEventObject>
作为第一个参数,我想知道我是否可以使用通用的“对象“作为第一个参数?
你可以。这是个坏主意。不要这样做。
采用object
的方法意味着我可以接受任何对象。如果你只能接受两种东西,那么写两种方法。
如果方法很短,就像这个,那就重复一遍。
几乎可以接受:如果方法很长并且您不想重复自己,那么创建一个带有对象的私有辅助方法,并且断言它的前置条件:
public void WriteEventsToFile(MyEventObject myEvent, string path)
{
WriteEventsToFileHelper(myEvent, path);
}
public void WriteEventsToFile(List<MyEventObject> myEvent, string path)
{
WriteEventsToFileHelper(myEvent, path);
}
private void WriteEventsToFileHelper(object myEvent, string path)
{
Debug.Assert(myEvent is MyEventObject || myEvent is List<MyEventObject>);
...
但这有点严重;只有当我真的感觉没有别的办法时,我才会这样做。
类型系统是你的朋友,它可以保证你的安全和健康。使用它!
答案 1 :(得分:2)
我发现你的方法存在两个问题:
我建议像这样解决:
private void WriteEventsToFile(MyEventObject myEvent, string path) {
WriteEventsToFile(new[] {myEvent}, path);
}
private void WriteEventsToFile(ICollection<MyEventObject> myEvents, string path)
{
string eventObject = JsonConvert.SerializeObject(myEvents);
try
{
System.IO.File.WriteAllText(path, eventObject);
}
catch (Exception e)
{
Debug.WriteLine("System.IO.File.WriteAllText Exception : " + e.Message + "\nCall Stack : " + e.StackTrace);
throw;
}
}