我有一个任务,我必须找到一种方法来使输入读取double
和decimal
并执行一些操作作为新方法。
char[] charSeparators = new char[] { ' ' };
Console.Write("Please type few numbers: ");
dynamic[] test = Console.ReadLine().Split(charSeparators, StringSplitOptions.RemoveEmptyEntries).ToArray();
dynamic value = test[0];
for (int i = 1; i < test.Length; i++)
{
if (test[i] < value)
{
value = test[i];
}
}
我想出使用dynamic
作为数据类型,但这引发了异常:
Operator '<' cannot be applied to operands of type 'string' and 'string'
我已经使用switch
进行后备,用户选择double
或decimal
,但我认为这更简单。
如何阻止dynamic
被视为string
?
答案 0 :(得分:1)
请注意,split方法总是返回一个字符串数组,因此您必须将其转换为结果。问题不在于动态。
示例:
char [] charSeparators = new char [] {''};
Console.Write("Please type few numbers: ");
dynamic[] test = Console.ReadLine().Split(charSeparators, StringSplitOptions.RemoveEmptyEntries).ToArray();
double value = double.Parse(test[0]);
for (int i = 1; i < test.Length; i++)
{
if (double.Parse(test[i]) < value)
{
value = double.Parse(test[i]);
}
}
答案 1 :(得分:0)
您正在接受控制台输入,这将是一个字符串。要将其转换为任何类型的数值,您需要解析它。
答案 2 :(得分:0)
试试这个:
var value= Convert.ToDecimal( test[0])
或
var value= Convert.ToDouble( test[0])
因为test [0]是字符串,所以当你将它定义为动态时,它的类型在运行时绑定,但没有区别,因为它的类型在complile time中是明确的,不需要将它定义为动态。
答案 3 :(得分:0)
[
"Text A" , "Text B" , "Text C"
]
将是一个字符串数组,因此您需要将其强制转换为小数或双精度数。
我不确定你是如何弄清楚它是否是十进制的两倍,所以为什么不将它们全部转换为十进制,因为该类型保持其精度。
答案 4 :(得分:0)
您当前的数组包含字符串。您需要将它们转换为小数或双精度
dynamic[] test = Console.ReadLine().Split(charSeparators, StringSplitOptions.RemoveEmptyEntries).ToArray().Select(double.Parse).ToArray();