”不能应用于类型“ulong”和“int”" /> 运算符“">”不能应用于类型“ulong”和“int”

运算符“">”不能应用于类型“ulong”和“int”

2024-05-19

我很好奇为什么 C# 编译器只为第二个 if 语句提供错误消息。

enum Permissions : ulong
{
    ViewListItems = 1L,
}

public void Method()
{
    int mask = 138612833;
    int compare = 32;

    if (mask > 0 & (ulong)Permissions.ViewListItems > 32)
    {
        //Works
    }

    if (mask > 0 & (ulong)Permissions.ViewListItems > compare)
    {
        //Operator '>' cannot be applied to operands of type 'ulong' and 'int'
    }
}

我一直在尝试这个,使用 ILSpy 检查输出,这就是我的发现。

显然,在你的第二种情况下,这是一个错误 - 你不能比较ulong and an int因为没有一种类型可以强制两者。 Aulong对于一个来说可能太大了long, 和int可能是负数。

然而,在第一种情况下,编译器很聪明。它意识到const1> 常量32从来都不是真的,并且不包括你的if编译输出中的语句根本没有。 (它应该对无法访问的代码发出警告。)如果您定义并使用const int而不是文字,或者即使您显式地转换文字(即(int)32).

但那不是compiler成功比较了ulongint,我们刚才说这是不可能的?

显然不是。所以呢is发生什么事了?

尝试按照以下方式做一些事情。 (获取输入并写入输出,这样编译器就不会编译任何内容。)

const int thirtytwo = 32;
static void Main(string[] args)
{
    ulong x = ulong.Parse(Console.ReadLine());
    bool gt = x > thirtytwo;
    Console.WriteLine(gt);
}

这将编译,即使ulong是一个变量,即使结果在编译时未知。看一下 ILSpy 中的输出:

private static void Main(string[] args)
{
    ulong x = ulong.Parse(Console.ReadLine());
    bool gt = x > 32uL;        /* Oh look, a ulong. */
    Console.WriteLine(gt);
}

所以,编译器实际上正在处理你的const int as a ulong。如果你做thirtytwo = -1,代码无法编译,即使我们知道gt will always是真实的。编译器本身无法比较ulong to an int.

另请注意,如果您使x a long代替ulong,编译器生成32L而不是32作为一个整数,即使它不是have到。 (您可以比较int and a long在运行时。)

这表明编译器不处理32 as a ulong在第一种情况下,因为它has仅仅因为它can匹配类型x。它使运行时不必强制强制常量,这只是当强制强制不可能时的一个好处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

运算符“">”不能应用于类型“ulong”和“int” 的相关文章

  • 单元测试验证失败

    我正在运行我的单元测试PostMyModel路线 然而 在PostMyModel 我用的是线Validate
  • 如何制作可启动程序?

    所以 这个问题可能看起来很奇怪 但假设我编译了 int main void int x 3 int y 4 int z x y 是否可以让CPU这样运行 如何 例如 这允许我写入监视器吗 如果我没记错的话 内存中有些地方可以写入要显示的内容
  • C# 5 async/await 线程机制感觉不对?

    为什么让调用线程进入异步方法直到内部 等待 一旦调用异步方法就生成一个线程 这不是更干净吗 这样您就可以确定异步方法会立即返回 您不必担心在异步方法的早期阶段没有做任何昂贵的事情 我倾向于知道某个方法是否要在 我的 线程上执行代码 不管是堵
  • 一元 +/- 运算符如何可能导致“-a”或“+a”中的整数提升,“a”是算术数据类型常量/变量?

    这句看似微不足道的台词摘自我的迈克 巴纳汉和布雷迪的 C 书 第 2 8 8 2 节 http publications gbdirect co uk c book chapter2 expressions and arithmetic h
  • 使用查询表达式对 List 进行排序

    我在使用 Linq 订购这样的结构时遇到问题 public class Person public int ID get set public List
  • 增强精神、递归和堆栈溢出

    为什么下面的代码在运行时崩溃 它会给出堆栈溢出错误 include
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换
  • 引用/指针失效到底是什么?

    我找不到任何定义指针 引用无效在标准中 我问这个问题是因为我刚刚发现 C 11 禁止字符串的写时复制 COW 据我了解 如果应用了 COW 那么p仍然是一个有效的指针并且r以下命令后的有效参考 std string s abc std st
  • Project Euler #8,我不明白我哪里出了问题[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在做项目欧拉第八题 https projecteuler net problem 8 其中我得到了这个大得离谱的数字 7316
  • 在 OpenGL 中渲染纹理 1 到 1

    所以我想做的是使用 OpenGL 和 C 将纹理渲染到平面上 作为显示图像的一种方式 但是我需要确保在渲染纹理时没有对纹理进行任何处理 抗锯齿 插值 平滑 模糊等 这是 OpenGL 处理渲染纹理的默认方式吗 或者是否需要设置一些标志才能禁
  • ASP.NET MVC 路由:如何从 URL 中省略“索引”

    我有一个名为 StuffController 的控制器 具有无参数索引操作 我希望从表单中的 URL 调用此操作mysite com stuff 我的控制器定义为 public class StuffController BaseContr
  • 逆向工程 ASP.NET Web 应用程序

    我有一个 ASP NET Web 应用程序 我没有源代码 该 bin 包含 10 个程序集和一个 compiled 文件 我在 App Code dll 上使用 Reflector 它向我显示了类和命名空间之类的东西 但它太混乱了 有没有什
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • LINQ 中的“from..where”或“FirstOrDefault”

    传统上 当我尝试从数据库中获取用户的数据时 我使用了以下方法 在某种程度上 DbUsers curUser context DbUsers FirstOrDefault x gt x u LoginName id string name c
  • 使用 using 声明时,非限定名称查找如何工作?

    根据 C 标准 这是格式错误还是格式良好 namespace M struct i namespace N static int i 1 using M i using N i int main sizeof i Clang 拒绝它 GCC
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl
  • 如何使用placement new重新初始化该字段?

    我的课程包含字段 private OrderUpdate curOrderUpdate 我一遍又一遍地使用它 经常需要重新初始化 for int i 0 i lt entries size i auto entry entries i ne
  • 为什么匹配模板类上的部分类模板特化与没有模板匹配的另一个部分特化不明确?

    这个问题可能很难用标题中的句子来描述 但这里有一个最小的例子 include
  • 使用未分配的局部变量

    我遇到了一个错误 尽管声明了变量 failturetext 和 userName 错误仍然出现 谁能帮帮我吗 Use of Unassigned local variable FailureText Use of Unassigned lo

随机推荐

  • 对于实时网站使用 Node.js 或 Ringojs 安全吗?

    正如标题中所述 我想知道使用实际的 omg 平台 即 Node js 和 Ringo js 的实际版本 之一来开发网站是否安全 另外 我想知道他们是否支持cookie sessions以及他们如何处理多字段帖子 PHP中的fieldname
  • 使用 UISearchBar 过滤数组

    我目前正在使用以下代码来过滤数组并将结果显示在我的 tableView 中 问题是 只有当搜索与确切的单词匹配时 才会返回结果 如何更改数组过滤器以在输入时搜索每个字符 let data Mango Grape Berry Orange A
  • Pyaudio 安装错误 - “命令‘gcc’失败,退出状态 1”

    我正在运行 Ubuntu 11 04 Python 2 7 1 并想安装 Pyaudio 于是我跑了 sudo easy install pyaudio 在终端中 进程退出并显示以下错误消息 Searching for pyaudio Re
  • 页面中某些超链接控件上的本地化资源未发生变化

    上面是正在开发中的网站的屏幕截图 我们有一个 DropdownList 控件 并在其 SelectedIndexChanged 上进行回发 然后我们更改站点区域性 然后加载相应的资源文件 DropDownList ASP NET 代码
  • java.library.path 中没有 dhtreader

    我尝试让这个专家projekt https bitbucket org Temdegon greenhouse在 Raspberry Pi 3 上运行 但 DHT11 传感器给出以下错误 sudo java classpath classe
  • href 中的 Mono ASP.NET MVC 波形符导致 System.NotImplementedException

    我正在尝试在 Ubuntu 14 04 1 上使用 Mono 3 12 0 制作 ASP NET 应用程序 每当我尝试在我的 href 中使用波浪号时 Layout cshtml 我得到一个System NotImplementedExce
  • WPF画布性能-children.add调用多次

    我在长画布上绘制了很多线条 想想条形图 并对其性能进行了相当好的调整 使用低级几何类并冻结它们等 这极大地提高了性能 但仍然需要几秒钟将几千个项目加载到画布中 我对应用程序进行了性能分析 看起来每次调用都花费了很大一部分时间canvas c
  • 垃圾邮件打败了我所有的验证码

    我有一个 WordPress 博客 我在上面使用验证码插件的时间最长 因为它有效 最近我收到了大量的垃圾邮件 然后我尝试执行通过 PHP 生成的 将这些随机数添加在一起 但仍然没有成功 我不太确定需要做什么来阻止这些垃圾邮件 但这很烦人 我
  • 如何在没有管理员权限的情况下在 VS Code(Windows) 中使用自定义字体来安装字体?

    我在我的工作电脑 Windows 7 上没有管理员权限 所以我无法将自定义字体 Fira Code 安装到我的系统中 有没有办法在 VS Code 中不安装就可以使用这种字体 为这个问题找到一个丑陋的解决方法 使用 webfont 打开菜单
  • 调用基本方法而不是覆盖方法

    在 C 中 类A包含一个公共方法Foo 它进行一些处理并返回一个值 protected method Bar 也在课堂上A执行与以下相同的逻辑Foo 然后进行一些额外的处理 然后返回一个值 为了避免重复代码 Bar calls Foo 并使
  • 将bitbucket发布到数字海洋

    我本质上是试图使用 bitbucket 来理解 git 的概念 我一直在通过修改本地帐户和 bitbucket 帐户之间的文件来练习版本控制 事实证明这很有帮助 现在我正在尝试弄清楚如何将文件从 bitbucket 或者我猜是 GitHub
  • 检测对项目外部 RecyclerView 的点击

    我有一个 RecyclerView 其中有 2 个项目没有填满整个屏幕 如何检测用户单击了 RecyclerView 的空白部分 意味着直接单击了 RecyclerView 而不是其项目之一 正如评论中提到的 mRecyclerView a
  • 调用线程无法访问该对象,因为另一个线程拥有它

    我已经阅读了很多关于此错误的帖子 但我不明白如何在我的解决方案中解决它 我有一个进度条对话框 其中包含一些逻辑 通过按钮单击从 MainFrame 调用 void OnBtnClick object sender RoutedEventAr
  • Spring Cloud Streams无法自动装配Source.class

    我正在从头开始学习 Spring Cloud Streams 我尝试创建一个像这样的源应用程序 import org springframework cloud stream messaging Source etc RestControl
  • 如何在 C# 中将 ListView 与目录和文件绑定

    我想在 C 的 ListView 中绑定 C 驱动器中的所有目录和文件 我的代码是 protected void Page Load object sender EventArgs e DirectoryInfo di new Direct
  • SQL Server 行锁

    如何在 SQL Server 2005 中进行行锁定 我执行一条 sql 进行行锁定 即 SELECT FROM authors WITH HOLDLOCK ROWLOCK WHERE au id 274 80 9391 它工作正常 但在这
  • 如何将自己的js文件导入到vite中?

    我将 Laravel 与 Vite 结合使用 我想使用 Vanilla JS 代码添加文件 在我使用mix之前 我从来没有使用过Vite 我尝试将此代码添加到文件 vite config js 中 如下例所示 laravel input r
  • Haskell:不在范围内:数据构造函数

    今天开始在学校学习 haskell 我遇到了函数问题 我不明白为什么它不在范围内 代码如下 ff Char gt Char gt Char ff A B x 0 y 1 x lt A y lt B x 1 y 0 和错误 md31 hs 2
  • 如何从代码隐藏运行存储过程(带参数 - 有返回值)?

    如何使用存储过程 带参数 具有类型的返回值int 从代码后面 我的存储过程如下所示 ALTER Procedure dbo sp Noskheh SumOfTotalPay Co ID int AS Declare Sum bigint B
  • 运算符“">”不能应用于类型“ulong”和“int”

    我很好奇为什么 C 编译器只为第二个 if 语句提供错误消息 enum Permissions ulong ViewListItems 1L public void Method int mask 138612833 int compare