.net中string.Format(“.... {0} .... {1} ....”,v1,v2)的替代品?

时间:2009-11-05 23:54:02

标签: c# string

string.Format()与它的“bla {0} bla”语法很棒。但有时候我不想列举占位符。相反,我只想在占位符中按顺序映射变量。有没有可以做到的图书馆?

例如,而不是

string.Format("string1={0}, string2={1}", v1, v2)

类似

string.Format("string1={*}, string2={*}", v1, v2)

4 个答案:

答案 0 :(得分:10)

现在在C#6.0中有一个叫做字符串插值的东西,所以

        var name = "ozzy";
        var x = string.Format("Hello {0}", name);
        var y = $"Hello {name}";

等同于同样的事情。

请参阅https://msdn.microsoft.com/en-gb/magazine/dn879355.aspx

答案 1 :(得分:5)

这是使用Regex.Replace的可能更快的版本。 警告:当你超出范围或者没有提供足够的参数时,不支持转义{*}或错误消息!

public static class ExtensionMethods
{
    private static Regex regexFormatSeq = new Regex(@"{\*}", RegexOptions.Compiled);

    public static string FormatSeq(this string format, params object[] args)
    {
        int i = 0;
        return regexFormatSeq.Replace(format, match => args[i++].ToString());
    }
}

答案 2 :(得分:3)

您可以通过编写自己的字符串扩展名和params关键字来自己完成此操作,假设您使用的是.NET 3.5或更高版本。

编辑:感到无聊,代码很草率且容易出错,但是如果需要的话,请将此类放在项目中并使用其命名空间:

public static class StringExtensions
{
    public static string FormatEx(this string s, params string[] parameters)
    {
        Regex r = new Regex(Regex.Escape("{*}"));

        for (int i = 0; i < parameters.Length; i++)
        {
            s = r.Replace(s, parameters[i], 1);
        }

        return s;
    }
}

<强>用法:

Console.WriteLine("great new {*} function {*}".FormatEx("one", "two"));

答案 3 :(得分:-1)

如果我只是写出一系列没有特殊格式的变量,我常常喜欢将它们连接起来,例如:

Console.WriteLine("string1=" + var1 + " string2=" + var2);

注意“string2”前面的前导空格,以分隔两个结果。