我正在学习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
,请帮忙。我对隐式转换一无所知。
请多谢一个人,谢谢。
答案 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
的类型。
您可以通过以下几种方法解决此问题:
minHour
更改为double,这将解决此问题。minHour
转换为双精度:var i = (double)minHour
i
时指定它:double i = minHour
我希望这会有所帮助!
答案 2 :(得分:0)
在两个示例中,变量i
被初始化为minHour
。编译器将仅从该语句推断类型,而不是其他用途。假定minHour
是int
,因此在两个示例中i
都是int
。由于它是int
,因此错误消息现在应该更有意义了。
请注意,var
不是某种动态类型,我怀疑这是您误解的根源。它是一种已知的固定类型,其类型是在编译时根据其用途确定的。因此,在两个示例中,它们等同于将单词var
替换为int
。如果您明确将其声明为double
,它将满足您的要求。
提示:如果您想知道var
的类型,请用鼠标悬停在其上。