我当时正在编写一个控制台程序,我试图将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
发布于 2015-11-02 16:14:09
Convert.ToInt32有一个重载,它接受:
当它无法匹配任何重载(void不是一个有效的选项)时,它只会选择一个在确定没有有效重载的步骤中失败的重载,并在错误消息中使用该重载。在这种情况下,它碰巧选择了DateTime重载,但它也可以轻松地选择其他任何一个参数重载。
发布于 2015-11-02 16:16:45
这并不是说Int32是System.DateTime
编译器只是想猜测:它认为您想调用Convert.ToInt32(DateTime dt);,而不是调用Convert.ToInt32(void); (是void返回类型的Console.WriteLine())。
Convert.ToInt32()有很多重载:它们都是在没有参数的情况下定义的。我不知道为什么它决定使用DateTime vs (例如)使用字符串或布尔值来获取重载:在任何情况下都不存在不接受参数的重载,因此不能编译代码。
发布于 2015-11-02 16:18:10
对于不同的类型,Convert.ToInt32有很多重载方法。它可能默认为DateTime类型。
https://stackoverflow.com/questions/33481913
复制相似问题