如何在C#中将params参数展开传递给另一个方法的params参数
解决方案
直接传递args数组会被C#当作单个参数处理,导致日志占位符匹配错误。正确的做法是将_businessUnit与args的所有元素合并为一个新数组,再传递给LogInformation:
方法1:数组复制拼接
private void LogTheThing(string message, params object?[] args) { // 创建容纳业务单元和所有传入参数的新数组 var combinedArgs = new object?[args.Length + 1]; combinedArgs[0] = _businessUnit; Array.Copy(args, 0, combinedArgs, 1, args.Length); _logger.LogInformation($"{{BusinessUnit}} - {message}", combinedArgs); }
方法2:LINQ拼接(需引用System.Linq)
using System.Linq; // ... private void LogTheThing(string message, params object?[] args) { var combinedArgs = new[] { _businessUnit }.Concat(args).ToArray(); _logger.LogInformation($"{{BusinessUnit}} - {message}", combinedArgs); }
两种方式都能让LogInformation接收到展开后的参数数组,实现和手动逐个传递参数一致的效果,确保日志中的所有占位符都能被正确替换。
内容的提问来源于stack exchange,提问作者TugboatCaptain
相关产品推荐
相关产品推荐

