切换案例和generics检查
我想编写一个函数,将int
和decimal
格式化为不同的字符串
我有这个代码:
我想把它重写为generics:
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 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... } /// /// If the number is an int - returned format is without decimal digits /// /// /// public static string FormatNumberTwoDecimalDigitOrInt(decimal value) { return (value == (int)value) ? FormatAsIntWithCommaSeperator(Convert.ToInt32(value)) : FormatAsDecimalWithCommaSeperator(value); }
我如何在函数体中使用T?
我应该使用什么语法?
您可以使用TypeCode进行切换:
switch (Type.GetTypeCode(typeof(T))) { case TypeCode.Int32: break; case TypeCode.Decimal: break; }
编辑:如果你只想处理int和double,只需要两个重载:
DoFormat(int value) { } DoFormat(double value) { }
如果你坚持使用generics:
switch (value.GetType().Name) { case "Int32": break; case "Double": break; default: break; }
要么
if (value is int) { int iValue = (int)(object)value; } else if (value is double) { double dValue = (double)(object)value; } else { }
在现代C#中:
public static string FormatWithCommaSeperator(T value) where T : struct { switch (value) { case int i: return $"integer {i}"; case double d: return $"double {d}"; } }
你可以代替使用generics使用IConvertible
public static string FormatWithCommaSeperator(IConvertible value) { IConvertible convertable = value as IConvertible; if(value is int) { int iValue = convertable.ToInt32(null); //Return with format. } ..... }
或者你可以随时做:
public static string FormatWithCommaSeparator(T[] items) { var itemArray = items.Select(i => i.ToString()); return string.Join(", ", itemArray); }
你可以检查变量的类型;
上述就是C#学习教程:切换案例和generics检查分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public static string FormatWithCommaSeperator(T value) { if (value is int) { // Do your int formatting here } else if (value is decimal) { // Do your decimal formatting here } return "Parameter 'value' is not an integer or decimal"; // Or throw an exception of some kind? }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1022835.html