You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何在函数内定义List的泛型T类型 并实现通用日志生成方法

实现代码

通用日志工具类实现

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

namespace ewmsCsharp.Models
{
    // 静态工具类更适合通用日志场景
    public static class Logging
    {
        // 泛型方法:调用时指定对应类的类型,直接返回匹配类型的日志实例
        public static ILogger<T> SetLogger<T>()
        {
            // 用GetRequiredService避免空引用问题,未注册时会直接抛出异常便于排查
            return _serviceProvider.GetRequiredService<ILoggerFactory>()
                .CreateLogger<T>();
        }

        // 可选重载:支持动态传入Type参数的场景
        public static ILogger SetLogger(Type targetType)
        {
            return _serviceProvider.GetRequiredService<ILoggerFactory>()
                .CreateLogger(targetType);
        }

        // 加readonly修饰避免服务提供器被意外修改
        private static readonly ServiceProvider _serviceProvider = new ServiceCollection()
            .AddLogging(configuration =>
            {
                configuration.AddConsole();
                configuration.SetMinimumLevel(LogLevel.Debug);
            })
            .BuildServiceProvider();
    }
}

日志方法调用示例

public class YourBusinessClass
{
    // 调用时指定当前类为泛型参数,即可拿到对应类型的日志实例
    private static readonly ILogger<YourBusinessClass> _logger = Logging.SetLogger<YourBusinessClass>();

    public void TestMethod()
    {
        _logger.LogDebug("测试日志输出");
    }
}

泛型创建指定类型List的实现

按需求封装通用泛型方法,避免重复写List初始化逻辑:

public static class CommonUtils
{
    // 通用创建指定类型List的方法,可自定义通用逻辑
    public static List<T> CreateTypedList<T>(params T[] initItems)
    {
        var result = new List<T>();
        // 可在这里加你的通用逻辑:比如默认填充值、校验、数据预处理等
        if (initItems != null && initItems.Length > 0)
        {
            result.AddRange(initItems);
        }
        return result;
    }
}

调用示例:

// 创建int类型的List
var intList = CommonUtils.CreateTypedList<int>(1, 2, 3, 4);
// 创建string类型的List
var strList = CommonUtils.CreateTypedList<string>("a", "b", "c");
// 创建自定义实体类型的List
var userList = CommonUtils.CreateTypedList<User>(new User { Id = 1, Name = "张三" });

注意事项

如果是在ASP.NET Core项目中,更推荐直接使用框架自带的依赖注入获取ILogger<T>实例,不需要自行封装静态日志类,上述静态日志实现更适合控制台、桌面端等非Web场景使用。

内容的提问来源于stack exchange,提问作者legopart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:06:09