我正在编写一个控制台程序,我尝试将Console.ReadLine()
转换为Int32
,而不是键入ReadLine()
,我不小心输入了WriteLine()
。
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());
}
}
}
}
我(显然)收到了错误,但它没有说出预期的内容,而是说我无法将void
转换为System.DateTime
。
为什么说Int32
是System.DateTime
?
答案 0 :(得分:4)
Convert.ToInt32
有一个重载,接受:
当它无法匹配任何重载(void
不是一个有效的选项)时,它只选择一个在确定没有有效重载的步骤中失败的重载并在其中使用错误信息。在这种情况下,碰巧选择DateTime
重载,但它可以很容易地选择任何其他单参数重载。
答案 1 :(得分:0)
并不是说Int32
是System.DateTime
编译器只是想猜测:它认为您想要致电Convert.ToInt32(DateTime dt);
,而是致电Convert.ToInt32(void);
(void
返回类型为Console.WriteLine()
)
Convert.ToInt32()有很多重载:没有参数都没有定义。 我不知道为什么它决定用DateTime vs(例如)带有字符串或布尔值的重载来获取重载:在任何情况下都没有不接受任何参数的重载,所以它无法编译代码
答案 2 :(得分:0)
Convert.ToInt32
有许多针对不同类型的重载方法。它可能默认为DateTime类型。