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



我只想将参数传递到方法中,仅用于日志记录。该参数是我将要处理的事件的一种类型。我可以看到两种方法,我想知道其中一种是否更正确?

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");
}

使用Type参数更干净,在这个问题上放置了我不同意的紧密标志,原因是第一个是所描述场景中更好的选择。

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

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

上面的方法现在只接受从类型继承的类 Event ,它更干净,并向客户端明确了你在这里的期望。

我不喜欢这两个选项中的任何一个。作为客户端,您必须使用反射来调用泛型版本,或者必须在将事件传递给日志记录函数之前调用事件GetType()。这似乎您的客户端与日志记录函数正在做的事情过于紧密地结合在一起。如果它想要记录有关事件的更多信息,会发生什么情况?您是否创建一个新方法并仅传递该信息?还是返回到对此方法的每个引用并添加新参数?

哎呀

,不管怎样,哎呀。我的建议:也不要做。传递事件,然后在方法本身中获取所需的任何内容。

最新更新