C# 使用泛型强制转换不同的用户输入类型
我有一个windows应用程序,允许在平板电脑上使用笔输入进行输入 需要时,表格(a)将打开另一个表格(B),以允许用户输入 在表(B)中,我有以下函数返回用户用钢笔输入的解码值C# 使用泛型强制转换不同的用户输入类型,c#,generics,C#,Generics,我有一个windows应用程序,允许在平板电脑上使用笔输入进行输入 需要时,表格(a)将打开另一个表格(B),以允许用户输入 在表(B)中,我有以下函数返回用户用钢笔输入的解码值 private object decodedValue; public T GetDecodedValue<T>() { return (T)decodedValue; } 现在在表单A中,需要两个字段来输入数据,一个是数量(int),另一个是价格(double)。我想让表单B适应不同的类型,这
private object decodedValue;
public T GetDecodedValue<T>()
{
return (T)decodedValue;
}
现在在表单A中,需要两个字段来输入数据,一个是数量(int),另一个是价格(double)。我想让表单B适应不同的类型,这就是我使用泛型的原因
因此,当表格B被接受时,它将返回表格A并使用以下代码
int qty = formB.GetDecodedValue<int>();
你知道我做错了什么吗?我使用泛型使事情过于复杂了?你不能将字符串转换为int或double,你需要使用int.Parse或double.Parse。我不认为在这里使用泛型比从表单a转换更干净,但这不是问题所在。问题是返回的值的类型不正确。它是一个字符串,不能从
string
转换为int
或double
。假设您确实想要解析它,您应该从表单B返回一个字符串,表单a应该使用or,适当地处理用户输入错误
(这是假设
Ink.Strokes.ToString()
返回诸如“5”或“10.50”之类的文本-我现在还不清楚这种情况。)
可能是您的最佳选择:
return (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFrom(decodedValue);
这通常适用于字符串
值-除此之外。。。打不中
还有:
return (T)Convert.ChangeType(decodedValue, typeof(T));
工作方式不同;两者都试-p试试这个:
return (T)Convert.ChangeType(decodedValue, typeof(T));
不能将int隐式转换为字符串,例如必须转换。这个工具很方便,我用它做了一些事情
试试看
Andrew根据代码的位置,您可能需要进行一些反射,以决定是执行int.Parse还是double.Parse,方法是对decodedValue的类型执行if语句。
return (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFrom(decodedValue);
return (T)Convert.ChangeType(decodedValue, typeof(T));
return (T)Convert.ChangeType(decodedValue, typeof(T));