【发布时间】:2012-03-21 10:06:37
【问题描述】:
我想编写一个函数,将int 和decimal 以不同的方式格式化为字符串
我有这个代码:
我想将其重写为泛型:
public static string FormatAsIntWithCommaSeperator(int value)
{
if (value == 0 || (value > -1 && value < 1))
return "0";
return String.Format("{0:#,###,###}", value);
}
public static string FormatAsDecimalWithCommaSeperator(decimal value)
{
return String.Format("{0:#,###,###.##}", value);
}
public static string FormatWithCommaSeperator<T>(T value) where T : struct
{
string formattedString = string.Empty;
if (typeof(T) == typeof(int))
{
if ((int)value == 0 || (value > -1 && value < 1))
return "0";
formattedString = String.Format("{0:#,###,###}", value);
}
//some code...
}
/// <summary>
/// If the number is an int - returned format is without decimal digits
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static string FormatNumberTwoDecimalDigitOrInt(decimal value)
{
return (value == (int)value) ? FormatAsIntWithCommaSeperator(Convert.ToInt32(value)) : FormatAsDecimalWithCommaSeperator(value);
}
如何在函数体中使用 T?
我应该使用什么语法?
【问题讨论】:
-
为什么不只有两个重载?我猜这是有原因的,但从你的例子来看,我宁愿有两种方法而不是打开类型。
-
为什么在这里使用泛型?您的方法是否可用于任何结构,即使是我自己定义的结构?
-
泛型在这里没有用,您不妨使用 object 作为参数类型。注意代码实际上是一样的。
-
如果值没有小数部分,您是否只想省略小数位?