在以下情况下如何解决类型转换错误

时间:2018-11-21 21:30:43

标签: c# implicit-conversion

我正在学习C#和.NET编程的基础知识。我有一个for循环,如下所示。

m['cumulative_ordered'] = m['cumulative_ordered'] / m['cumulative_ordered'][m['cumulative_ordered'].index.days == 0]

当我将以上内容替换为:

for(var i = minHour; i <= maxHour; i++)

然后我看到一个错误:

  

不能将类型double隐式转换为int。

我不想声明for(var i = minHour; i <= maxHour; i+=0.5) 类型的i,请帮忙。我对隐式转换一无所知。

请多谢一个人,谢谢。

3 个答案:

答案 0 :(得分:1)

您可以这样解决:

//beware when using i as indexer.
for(var i = minHour * 2; i <= maxHour * 2; i++)
//note: both minHour and maxHour need to be multiplied by 2
//Proof:
// n = maxHour - minHour =>
// 2 n = 2 (maxHour - minHour) =>
// (maxHour - minHour) * 2 = 2 * maxHour - 2 * minHour
//

或者,或者:

//type changed to double:
double minHour = 0, maxHour = 1;
for(var i = minHour; i <= maxHour; i+=0.5)

或更佳(但不是您的最爱);

for(double i = minHour; i <= maxHour; i+=0.5)

答案 1 :(得分:1)

我不确定我为什么要在这种情况下继续使用var而不是简单地定义double i =来解决您的问题,但是由于您在问题中指定了它,因此我将忽略现在。

相反,让我们看一下为什么它首先引发此错误。您正在使用var i =定义变量,您可能会认为只需将i放入通用变量即可。这在C#中是不正确的。相反,C#将尝试推断此变量的类型,并且由于您使用的是var i = minHour,因此i的类型将推断minHour的类型。

您可以通过以下几种方法解决此问题:

  1. 您可以将minHour更改为double,这将解决此问题。
  2. 您可以像这样将minHour转换为双精度:var i = (double)minHour
  3. 您可以做可能做的事情,并在声明i时指定它:double i = minHour

我希望这会有所帮助!

答案 2 :(得分:0)

在两个示例中,变量i被初始化为minHour。编译器将仅从该语句推断类型,而不是其他用途。假定minHourint,因此在两个示例中i都是int。由于它是int,因此错误消息现在应该更有意义了。

请注意,var不是某种动态类型,我怀疑这是您误解的根源。它是一种已知的固定类型,其类型是在编译时根据其用途确定的。因此,在两个示例中,它们等同于将单词var替换为int。如果您明确将其声明为double,它将满足您的要求。

提示:如果您想知道var的类型,请用鼠标悬停在其上。