c# - 我可以使用 'object' 关键字使方法更通用吗?

标签 c# .net

我写了一个方法,将 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 with List<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/

相关文章:

c# - Esent 和 Ravendb 中的 .Net 终结器顺序/语义

.net - 为 WP7 构建一个 .NET dll

c# - 如何更新状态栏标签上显示的文本

.net - ASP.NET:如何将值从本地资源传递给字符串?

c# - 事先检查 `System.Activator.CreateInstance(Of T)` 是否会失败

c# - 检测另一个进程中的特定窗口何时打开或关闭

c# - 防止用户通过系统热键退出 Windows 应用程序

c# - 获取最大元素的索引

java - 通过原始套接字编码字符串 - 额外字符

c# - 无法加载类型 ServiceCollectionExtensions