C#使用动态为十进制和双精度

时间:2015-05-11 12:47:01

标签: c# dynamic methods

我有一个任务,我必须找到一种方法来使输入读取doubledecimal并执行一些操作作为新方法。

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进行后备,用户选择doubledecimal,但我认为这更简单。

如何阻止dynamic被视为string

5 个答案:

答案 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();