我有一个列表
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
答案 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)
,其中coefficient
是T
。您也可以使用:
polynomialString.AppendFormat("{0:0.0000}", coefficient)
与您的StringBuilder
。这最终也会调用coefficient.ToString("0.0000", null)
。