格式化List <t> </t>中的字符串

时间:2015-03-04 18:42:51

标签: c# string format

我有一个列表

public class PolynomialCoefficients<T> : IEnumerable<T>
{
    private List<T> coefficients;

    public string ToString(string format)
    {
        StringBuilder polynomialString = new StringBuilder();
        char separator = ':';

        foreach(T coefficient in coefficients)
        {
            polynomialString.Append(String.Format("0.0000", coefficient.ToString()));
            polynomialString.Append(separator);
        }

        polynomialString.Remove(polynomialString.Length - 1, 1); 
        return polynomialString.ToString();
    }
}

让我们说该列表包含元素:1,2,3 我想打电话     的ToString(&#34; 0.000&#34) 得到输出:1.000:2.000:3.000 但每次输出类似于0.000:0.000:0.000

5 个答案:

答案 0 :(得分:5)

String.Format需要一种非常特殊的字符串。你给它打印了一个文字字符串:

String.Format("0.0000", coefficient.ToString());

所以它只是打印出来的。如果你给它一个占位符

String.Format("{0}", coefficient.ToString("0.0000"));

它将替换传递的参数。您还可以指定占位符的格式:

String.Format("{0:f4}", coefficient);

&#34; F4&#34;会给你你的格式。标准格式字符串可以在MSDN

上找到

答案 1 :(得分:4)

首先,您不需要ToString()上的coefficient.ToString()来电。其次,您的格式字符串有点不正确:您需要使用"{0:0.0000}"表单。

虽然我们正在使用它,但您的代码可以大大简化:

var result = string.Join(";", coefficients.Select(c => string.Format("{0:0.0000}", c));
return result;

答案 2 :(得分:2)

原因是在ToString中拨打了String.Format而没有指定place holder

String.Format("0.0000", coefficient.ToString())
                                  //^^^^^
具有您的格式的

String.Format应该是一个浮点数,它不会对字符串值起作用,对于string值,格式将被忽略,并且将返回传递的值。

您还必须指定占位符,如:

string str = (String.Format("{0:0.0000}", coefficient));

考虑以下示例:

String.Format("{0:0.0000}", 1.2345123123) //would return "1.2345"
String.Format("{0:0.0000}", "1.2345123123")//would return "1.2345123123" ignoring the format

答案 3 :(得分:2)

public class PolynomialCoefficients<T> : IEnumerable<T>
{
    private List<T> coefficients;

    public string ToString(string format)
    {
        const string separator = ":";
        return string.Join(separator, coefficients.Select(c => string.Format("{0:f4}", c)));
    }
}

答案 4 :(得分:0)

您应该T约束IFormattable

public class PolynomialCoefficients<T> : IEnumerable<T>
    where T : IFormattable

有了这个,您可以使用coefficient.ToString("0.0000", null),其中coefficientT。您也可以使用:

polynomialString.AppendFormat("{0:0.0000}", coefficient)

与您的StringBuilder。这最终也会调用coefficient.ToString("0.0000", null)