2015-11-02 43 views
1

我正在寫一個控制檯程序,我試圖將Console.ReadLine()轉換爲Int32,而不是打字ReadLine(),我意外地輸入了WriteLine()Int32是DateTime嗎?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace LinqIntegersDemo.cs 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int[] nums = new int[10]; 
      var sorted = from c in nums orderby c descending select c; 
      int x = 0; 

      foreach (var n in nums) 
      { 
       Console.Write("Enter an integer >> "); 
       nums[x] = Convert.ToInt32(Console.WRITELINE()); 
      } 
     } 
    } 
} 

我(顯然)得到了一個錯誤,但不是它說什麼預期,它說,我不能轉換voidSystem.DateTime

爲什麼說Int32System.DateTime

+0

這並不是說'int'是'DateTime',它是說它不能將'Console.WriteLine()'(即'void')的結果轉換爲'System.DateTime',這很有意義,因爲你不能將任何東西轉化爲某物。 'Convert.ToInt32'有一個重載,它需要'DateTime'的值(見[這裏](https://msdn.microsoft.com/en-us/library/ch56d3w9(v = vs.110).aspx))和它所做的就是拋出一個'InvalidCastException',這是你所看到的錯誤。儘管如此,我沒有回答爲什麼它會選擇*超載。 –

回答

4

Convert.ToInt32具有接受一個過載:

  • 日期時間
  • 布爾
  • 字節
  • 字符
  • 十進制
  • 的Int16
  • Int64的
  • 對象
  • 字符串
  • 更多的人,看到其餘

文檔當它不能匹配任何重載(void是不是一個有效的選項),它只是選擇在確定沒有有效重載的步驟中失敗的重載之一,並在錯誤消息中使用該重載。在這種情況下,它恰巧選擇DateTime重載,但它可以輕鬆地選擇任何其他單參數重載。

+0

它是否按特定順序選擇它們? – Slappywag

+0

@Slappywag沒有意義,當然沒有你想要依賴的東西。 – Servy

0

這不是說Int32System.DateTime

編譯器只是試圖猜測:它認爲你想叫Convert.ToInt32(DateTime dt);,而是調用Convert.ToInt32(void);(即voidConsole.WriteLine()返回類型)

Convert.ToInt32()有很多過載:沒有一個是沒有參數定義的。 我不知道爲什麼它決定用DateTime和(比如)重載一個字符串或布爾值來重載重載:在任何情況下都沒有不接受任何參數的重載,所以它不能編譯代碼

0

Convert.ToInt32針對不同類型有很多重載方法。它可能默認爲DateTime類型。

相關問題