This question already has answers here:
Named arguments call in C# with variable parameter number
                                
                                    (2个答案)
                                
                        
                                6年前关闭。
            
                    
这是我的日志签名

public static void Debug(string message,Exception exception = null,object model = null,object userId = null,[CallerMemberName] string memberName = "",params object[] formatParams)


我试图用它说

Logger.Debug("My message: {0} {1}", formatParams:1,2)


我怎样才能做到这一点?我无法在网上找到它,我希望这是可能的。我尝试了一种匿名类型,但没有奏效。

Logger.Debug("My message: {0} {1}", formatParams: new{1,2})


解析度:
我最终使用下面的示例。我在使用其他语法时遇到了不同的错误,因此希望确保将其保存在此处。

Logger.Debug("My message: {0} {1} {2}", formatParams: new object[] { 1, "string", 123.12m });


编辑:
我的问题最终与在formatParams中传递动态有关,我通过将其强制转换为在记录日志之前的类型来解决此问题。

最佳答案

是的你可以。您只需要使用如下数组调用它:

Logger.Debug("My message: {0} {1}", formatParams: new object[] { 1, 2 });


对于单个参数,这不是必需的,您可以使用:

Logger.Debug("My message: {0}", formatParams: 1);


请注意,在许多情况下,您还可以使用隐式类型的数组:

Logger.Debug("My message: {0} {1}", formatParams: new[] { 1, 2 });


但是,这将传递一个对象数组,其中包含一个整数数组。参数值实际上看起来像这样:

new object[] { new int[] { 1, 2 } }

09-10 02:11
查看更多