【发布时间】:2016-12-01 15:04:59
【问题描述】:
我已经开发了这个基本方法,我希望它能够修剪并返回任何类型:
public static object TrimValue<T>(T arg, int MaxLength)
{
var val = arg.ToString();
var trimVal = val.Substring(0, MaxLength);
return Convert.ChangeType(trimVal, arg.GetType());
}
用途:
double aDouble = 1000;
double cDouble = TrimValue(aDouble, 2);
不幸的是我得到了错误:
无法将类型“object”隐式转换为“double”
演员表会起作用,但我可能会修剪 Double、String 或 Int,这样就不起作用了。有谁知道如何修剪通用值?
谢谢
【问题讨论】:
-
“将双精度数修剪为 2”是什么意思?这意味着它将
1000更改为10?TrimValue(new DateTime(2016,12,1),3)会返回什么?修剪如何应用于除字符串之外的任何内容? -
@DanHall 那么为什么返回类型不是
string或者你为什么没有将返回类型设置为T? -
当
MaxLength大于val字符串的长度时,您也会遇到问题。 -
我希望你不希望将它用于 String[] 或 List
。甚至是一个布尔... -
但是“修剪”一个数字是没有意义的,因为它会改变值。如果客户想要发送一个太大的数字,那么隐式“修剪”它会发送一个不同的值。另外,尝试将“修剪过的”字符串表示更改回原始类型似乎非常脆弱。 “1.2E3”是一个有效的
double字符串,但“1.2E”不是。 “2016-12-01”是有效的日期字符串,但“2016-0”不是。也许您已经采取了其他保护措施来防止这种情况发生,但从表面上看,这似乎很奇怪。
标签: c# generics type-conversion