声明十六进制数字:名称'B9780'在当前上下文中不存在

问题描述 投票:0回答:1

我不知道为什么这样说:

名称“ B9780”在当前上下文中不存在

我有以下代码:

class Program
{
    public static int TimerBase = 00DB9780;
}

我希望它接受,但是它说:

无法将类型double隐式转换为int。存在显式转换(您是否缺少演员表?)

c# hex
1个回答
3
投票

00DB9780表示为十六进制。将int声明为0x前缀:

public static int TimerBase = 0x00DB9780;
                          //  ^^ add 0x to start of hex numbers  

0x的前缀告诉编译器期望并解析一个十六进制数。


错误解释

编译器说无法将int转换为double的原因是值00D的第一部分实际上是在C#中声明double的一种方法。有关更多信息,请参见this link。所以它认为您正在尝试这样做:

public static int TimerBase = 0D;  // LHS is int, RHS is double

所以您得到错误:

无法将类型double隐式转换为int

编译器希望在;声明(double)之后看到00D,因此也会因缺少分号而引发错误:

;预期

接下来,编译器将看到B9780,它将尝试将其解释为变量,这就是您收到错误的原因:

'B9780'在当前上下文中不存在

© www.soinside.com 2019 - 2024. All rights reserved.