Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用泛型强制转换不同的用户输入类型_C#_Generics - Fatal编程技术网

C# 使用泛型强制转换不同的用户输入类型

C# 使用泛型强制转换不同的用户输入类型,c#,generics,C#,Generics,我有一个windows应用程序,允许在平板电脑上使用笔输入进行输入 需要时,表格(a)将打开另一个表格(B),以允许用户输入 在表(B)中,我有以下函数返回用户用钢笔输入的解码值 private object decodedValue; public T GetDecodedValue<T>() { return (T)decodedValue; } 现在在表单A中,需要两个字段来输入数据,一个是数量(int),另一个是价格(double)。我想让表单B适应不同的类型,这

我有一个windows应用程序,允许在平板电脑上使用笔输入进行输入

需要时,表格(a)将打开另一个表格(B),以允许用户输入

在表(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));