我写了一个方法,将 myEvent 写入路径参数提供的 json 文件。
不是重载此方法,而是使用一个将 MyEventObject 作为第一个参数的方法和一个带有 List<MyEventObject>
的第二个重载方法作为第一个参数我想知道是否可以只使用通用“对象”作为第一个参数?
无论是列表还是 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;
}
}
最佳答案
Instead of overloading this method and having one method that takes
MyEventObject
as the first parameter and a second overloaded method withList<MyEventObject>
as the first parameter I am wondering if I could just use a generic "object" as the first parameter?
你可以。这是个坏主意。不要这样做。
采用 object
的方法表示我可以接受任何对象。如果你只能接受两种东西,那么写两种方法。
如果方法很短,就像这个,那么就重复一遍。
勉强可以接受:如果该方法很长并且您不想重复自己,那么创建一个带有对象的私有(private)辅助方法,并断言其前提条件:
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>);
...
但这有点恶心;只有当我真的觉得别无选择时,我才会这样做。
类型系统是您的 friend ,它可以保护您的安全和健康。使用它!
关于c# - 我可以使用 'object' 关键字使方法更通用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49990342/