c# - 从静态类调用方法,传递带有泛型的动态变量类型

标签 c# .net generics reflection static-methods

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

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/

相关文章:

c# - HttpListenerResponse 添加第二个 cookie 使所有 cookie 消失

.net - 使用 LINQ to XML 删除节点,排除具有特定属性的节点

java - 使用 Class<T> 和 <T extends A> 在 java 中无法进行强制转换

java - 如何使用泛型将类及其类型作为参数传递?

c# - 使用 Protocol Buffer 的增量压缩

c# - 如何使用自定义属性延迟加载属性

c# - 带有 Out 参数的 SQL Server CLR UDF - 这可能吗?

.net - 在 .netcoreapp 中启用开发模式

c# - 如何从 youtube 获取我的 youtube 视频列表?

java - 在 Java 中捕获一个通用异常?