我应该在C#中使用泛型还是类型参数?

时间:2019-04-03 15:41:20

标签: c# generics types

我只想将参数传递到方法中以进行记录。该参数是我要处理的事件的类型。我可以看到两种解决方法,我想知道这两种方法是否更正确?

private void LogEventProcessing<T>()
{
    _logger.Information($"Started processing of {typeof(T).Name} event");
}
private void LogEventProcessing(Type type)
{
    _logger.Information($"Started processing of {type.Name} event");
}

2 个答案:

答案 0 :(得分:1)

使用Type参数更简洁,对此问题我贴上了不同意的标志,原因是在上述情况下第一个是更好的选择。

您可以使用Type Constraints约束客户端插入的参数Type

private void LogEventProcessing<T>() where T : Event
{
    _logger.Information($"Started processing of {typeof(T).Name} event");
}

上述方法现在将仅接受从类型Event继承的类,它更干净,并且可以使客户端清楚地了解您在这里的期望。

答案 1 :(得分:-1)

我不喜欢这两个选项。作为客户端,您要么必须use reflection来调用通用版本,要么必须在事件上调用GetType(),然后再将其传递给日志功能。好像您的客户端与日志记录功能正在执行的操作紧密相关。如果它想记录有关该事件的更多信息会怎样?您是否创建一种新方法并仅传递该信息?还是返回到对此方法的所有引用并添加一个新参数?

运气,无论如何,运气。我的建议:也不要这样做。传递事件,然后从方法本身中获取所需的任何内容。