我只想将参数传递到方法中以进行记录。该参数是我要处理的事件的类型。我可以看到两种解决方法,我想知道这两种方法是否更正确?
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");
}
答案 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()
,然后再将其传递给日志功能。好像您的客户端与日志记录功能正在执行的操作紧密相关。如果它想记录有关该事件的更多信息会怎样?您是否创建一种新方法并仅传递该信息?还是返回到对此方法的所有引用并添加一个新参数?
运气,无论如何,运气。我的建议:也不要这样做。传递事件,然后从方法本身中获取所需的任何内容。