转换[string] .ToString([自定义格式])

时间:2013-12-09 15:20:52

标签: c# string string-formatting

如何将格式字符串实现为自定义格式:

int value = 5000;
String.Format("{0:## ###}", value);
value.ToString("##");

但是将值作为字符串,而不使用转换为数字? 像这样的东西:

String.Format("{0:## ###}, "5000");

**更新:

我正在尝试创建一个通用函数:

    public string FormatString(string value, string format = "") {
        if (value == null){
            return "";
        }

        return String.Format("{0:" + format + "}", value);
    }

    public bool OtherFunction(id){
          var data = dc.GetData(id);
          ViewBag.DescriptionText = FormatString(data.Description).Replace("\n", "<br />");
          ViewBag.Phone = FormatString(data.Phone, "(##) ####-#####");
          ViewBag.City= FormatString(data.City);
          [...]
    }

2 个答案:

答案 0 :(得分:1)

我不认为这样的事情存在。就像Jon说的那样,这是为数字设计的。

如果你只想用#格式化“你可以编写简单的函数,就像这样

public string FormatString(string value, string format = "")
{
    if (String.IsNullOrEmpty(value) || String.IsNullOrEmpty(format))
        return value;

    var newValue = new StringBuilder(format);

    for (int i = 0; i < newValue.Length; i++)
    {
        if (newValue[i] == '#')
            if (value.Length > 0)
            {
                newValue[i] = value[0];
                value = value.Substring(1);
            }
            else
            {
                newValue[i] = '0';
            }
    }

    return newValue.ToString();
}

当然这很简单。如果格式太长(例如:填充'0')以及格式太短(这里:只是'截断'其余值),您将必须检查并决定该怎么做。

但我认为你知道如何做到这一点。

我的磁盘上的某处我有这样的代码:特殊方式格式化数字/发票号码模式。如果我发现这个,我会在博客上发帖并粘贴链接

答案 1 :(得分:0)

“5000”是一个字符串。 string.ToString()唯一可用的重载是具有IFormatProvider [1]的重载。虽然你可以实际实现它,但你最终可能会遇到类似于你不喜欢的int.Parse()。

[1] http://msdn.microsoft.com/de-de/library/29dxe1x2(v=vs.110).aspx