2015-05-11 55 views
0

我有一個任務,我得找出一種方法,使輸入讀取doubledecimal並執行一些操作作爲新的方法。C#使用動態的小數和雙精度

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

+0

嘗試使用'var'? –

+3

'動態的'是編譯器對「推遲檢查」的一個標記,直到運行時。它不會自動爲您改變類型。您需要首先將其轉換爲「decimal」或「double」。 'var'不會工作,因爲你總是讀一個字符串。 –

+1

'value'是一個字符串,因爲您可以從'string.Split'中獲取它。您需要使用各種'decimal'和'double'解析選項之一將這些字符串轉換爲數字值。 –

回答

0

您正在接受將作爲字符串的控制檯輸入。爲了進入任何類型的數值,你需要解析它。

0

試試這個:

var value= Convert.ToDecimal(test[0]) 

var value= Convert.ToDouble(test[0]) 

因爲測試[0]是字符串,所以當你將它定義爲動態的,它的類型在運行時綁定,但都沒有區別,因爲它的類型在complile時間是明確的,並且不需要將其定義爲動態的。

0

dynamic[] test = Console.ReadLine().Split(charSeparators, StringSplitOptions.RemoveEmptyEntries).ToArray();將是一個字符串數組,因此您需要將其轉換爲小數或雙精度。

我不知道你是怎麼知道它是否是小數的兩倍,所以爲什麼不把它們都轉換成小數,因爲這種類型保持精度。

0

您當前的數組包含字符串。你需要將它們轉換爲小數或雙打

dynamic[] test = Console.ReadLine().Split(charSeparators, StringSplitOptions.RemoveEmptyEntries).ToArray().Select(double.Parse).ToArray(); 
1

注意,拆分方法總是返回一個字符串數組,所以你必須把它轉換的結果。問題不在於Dynamic。

實施例:

炭[] charSeparators =新的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]); 
     } 
    }