如何从静态类调用方法,传递泛型动态类型。 这是我的静态类:
public static class Log<T>
{
private readonly static ILog Logger = LogManager.GetLogger(typeof(T));
public static void LogInfo(string message)
{
Logger.Info(message);
}
}
我想这样调用 LogInfo:
Log<myObject.GetType()>.LogInfo("Some String");
我的问题是如何在 Generic 中传递 myObject 类型,因为该对象的类型是动态的。
最佳答案
I want to call LogInfo like this:
Log<myObject.GetType()>.LogInfo("Some String");
为什么?你为什么不这样做:
public static class Log {
private static readonly Dictionary<Type, ILog> loggers =
new Dictionary<Type, ILog>();
public static void LogInfo(Type type, string message) {
var logger = Log.GetLoggerForType(type);
logger.Info(message);
}
public static void LogInfo<T>(string message) {
LogInfo(typeof(T), message);
}
private static ILog GetLoggerForType(Type type) {
ILog logger;
if(!loggers.TryGetValue(type, out logger)) {
logger = LogManager.GetLogger(type);
loggers.Add(type, logger);
}
return logger;
}
}
请注意,这不是、不是、不是线程安全的。我想传达这个想法。
然后:
Log<myObject.GetType()>.LogInfo("Some String");
可以替换为
Log.LogInfo(myObject.GetType(), "Some String");
或者你甚至可以更进一步,添加一个重载,让你可以说
Log.LogInfo(myObject, "Some String");
(只需在LogInfo
中调用object.GetType
)。
关于c# - 从静态类调用方法,传递带有泛型的动态变量类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6386130/