gpt4 book ai didi

c# - 使用泛型从静态类传递动态变量类型调用方法

转载 作者:行者123 更新时间:2023-11-30 21:14:12 24 4
gpt4 key购买 nike

我如何从静态类中调用一个方法,在泛型中传递一种动态类型。这是我的静态类:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com