C#中的动态字符串格式化

3
我创建了一个接受字符串的日志方法。当我想使用它时,我会写类似下面的内容:
Log(string.Format("Message {0}", AdditionalInfo));

如何实现Log方法,以便能够使用字符串Format,但不必在方法参数中显式地编写它:

Log("Message {0}", AdditionalInfo);

我使用 .net 2.0


1
感谢您的快速回答 :) - Darqer
1
现在可以放心观看比赛 :) - Zruty
@Zruty:哈哈,我猜我们可以争论一整天关于这个…… - leppie
我希望有特权的人在我们玩得开心后清除这个问题。 - Zruty
5个回答

8
public void Log(string formatString, params object[] parameters)
{
    Log(String.Format(formatString, parameters));
}

3
这个网站有其命名的原因 :) 无论如何,你是错误的。至少C# 4.0可以区分Log()的这些重载,并且不会导致无限递归。 - Zruty
@Zruty,@Nubsis,你们确定吗?你们测试过这段代码了吗?因为我已经测试过了。而且我是使用C# 4.0进行的测试。 - Darin Dimitrov
2
在我发布答案之前,我进行了验证,它可以正常工作。您测试的是哪段代码? - Zruty
@Darin Dimitrov:如果进入了无限循环,那么你只测试了一半的代码。 - leppie
1
@Darin Dimitrov:是的,你可能没有Log(string)重载,而原帖作者似乎有。 - Zruty
显示剩余3条评论

4
public void Log(string format, params object[] args)
{
    DoTheLog(string.Format(format, args));
}

2
哎呀,无法重载“Log”方法。 - leppie

2
void Log(string format, params object[] args)
{
  Log(string.Format(format, args));
}

1
@Darin Dimitrov:嗯?请解释一下为什么您认为递归(甚至在这里也不是)是不好的。 - leppie
这是一个无限递归。这就是问题所在!至少如果没有方法 Log(string message) - Daniel Hilgarth
2
@Daniel Hilgarth:这是假设Log(string)未定义,但显然OP已经定义了该方法... - leppie
@leppie:在我看来,应该指出如果缺少重载会导致无限递归,因为这对许多人来说并不明显。 - Daniel Hilgarth
@Daniel Hilgarth:很抱歉,人们无法正确阅读问题并不是我的问题。 - leppie
显示剩余4条评论

1

尝试类似这样的东西:

public void Log(string format, params object[] arguments)
{
    string message = string.Format(format, arguments);
    // Do something with message.
}

-3

你可以为你的日志方法编写一个包装器。我希望像这样的东西能起作用。

public void Log(string format, object args)
{
    Do_Log(string.Format(format, args))
}

现在,您可以将Do_Log()设为私有,并且不向类的使用者公开它。

3
我认为这个问题已经得到了足够的回答,不必仅仅“复制”其他回答... - leppie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接