'Object.ReferenceEquals' 始终为 false,因为它是使用值类型调用的

2024-03-21

当我使用slSvcUtil.exe要创建我的服务客户端文件,我看到如下代码:

private string CategoryField;

[System.Runtime.Serialization.DataMemberAttribute()]
public string Category
{
    get
    {
        return this.CategoryField;
    }
    set
    {
        if ((object.ReferenceEquals(this.CategoryField, value) != true))
        {
            this.CategoryField = value;
            this.RaisePropertyChanged("Category");
        }
    }
}

当我检查它时锐锐,我收到以下警告:

'Object.ReferenceEquals' 始终为 false,因为它是使用值类型调用的

我明白那个字符串是不可变的 https://stackoverflow.com/a/4106046/682480,但我似乎收到了每个属性的警告。

锐锐建议如下:

注意:这包括我的自定义样式,将简单的 getter 放在一行上,反转if,去除多余的object预选赛和!= true比较

private string CategoryField;

[DataMember]
public string Category
{
    get { return this.CategoryField; }
    set
    {
        if (Equals(this.CategoryField, value)) { return; }

        this.CategoryField = value;
        this.RaisePropertyChanged("Category");
    }
}

所以这确实引出了一个问题,为什么slSvcUtil.exe use ReferenceEquals代替Equals if ReferenceEquals总是会返回 false 吗?


您是否想要使用似乎有争议Equals or ReferenceEquals对于字符串。Equals将比较字符串的值,而ReferenceEquals将比较引用——但是,由于字符串驻留,等效的字符串文字将作为相同的引用出现。例如:

    static void Main(string[] args)
    {
        string x = "hi", y = "hi", z = string.Concat('h', 'i');
        Console.WriteLine(ReferenceEquals(x, y));   // true
        Console.WriteLine(ReferenceEquals(x, z));   // false

        Console.WriteLine(Equals(x, y));   // true
        Console.WriteLine(Equals(x, z));   // true

        Console.ReadLine();
    }

那么代码生成算法的作者是如何决定的呢?我能想到的几个考虑因素:

  • 表现:Object.Equals需要虚拟方法调用,这可能比静态方法调用性能低Object.ReferenceEquals(假设我们正在讨论字符串,作为引用类型不需要装箱)。
  • Normally你会想用ReferenceEquals对于引用类型——作者可能认为不值得为字符串的特殊情况维护单独的代码。
  • 另请注意,使用ReferenceEquals is the 防御性的在这个具体实例中的选择。使用ReferenceEquals确保 setter 应用于上面的情况#2,而使用Equals would not在这种情况下应用设置器。您可能会想到一些极端的情况,其中后一种行为可能会引入非常难以检测的错误。

无论如何,Resharper 的警告显然是错误的。String是引用类型,而不是值类型,并且(如上面的示例所示)ReferenceEquals事实上可以返回true对于字符串值。

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

'Object.ReferenceEquals' 始终为 false,因为它是使用值类型调用的 的相关文章

  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var

随机推荐

  • Google Play 控制台堆栈跟踪

    在 Google Play Console 中 我收到以下异常跟踪 虽然我添加了反混淆文件 但行号显示为 0 java lang NullPointerException at com ae apps common managers Con
  • 将对象移动到地图中

    这样做的问题是巨大的物体将被复制到地图中 Huge huge1 some args Huge huge2 some args std map
  • Python 和 websockets - 发送音频流

    我已经设置了一个套接字服务器并将消息发送到所有连接的客户端 我正在将数据从 python 发送到 javascript 我想将我的麦克风输入发送给所有正在收听的客户 所以在我的 Python 应用程序中我执行以下操作 import pyau
  • (有效)合并随机键控子集

    我有两个data tables 我想从匹配键的元素中随机将一个元素分配给另一个元素 我现在这样做的方式非常慢 让我们具体说一下 这是一些示例数据 dt1 lt data table id sample letters 1 5 500 rep
  • pandas DataFrame 多列的并排箱线图

    一年的样本数据 import pandas as pd import numpy random as rnd import seaborn as sns n 365 df pd DataFrame data A rnd randn n B
  • Chrome 开发者控制台问题

    我正在尝试测试我的网站上产生随机整数的功能 我想知道是否可以使用 chrome 开发者控制台通过代码触发按钮事件 而无需实际按下页面上的按钮 是否可以发送与用户输入文本框中的值不同的值 假设用户将他的名字输入 Tom 有没有办法通过控制台中
  • 尝试注册两个同名的ProgressBarAndroid视图

    将react版本16 0 0与react native版本0 49 1一起使用会引发红屏错误 尝试注册两个具有相同名称的ProgressBarAndroid视图 删除 ProgressBarAndroid 的所有导入和实例会产生运行良好的程
  • scikit learn:未选择所需数量的最佳功能 (k)

    我试图使用卡方 scikit learn 0 10 选择最佳特征 我首先从总共 80 个训练文档中提取 227 个特征 然后从这 227 个特征中选择前 10 个特征 my vectorizer CountVectorizer analyz
  • Hibernate 的泛型

    Hibernate 无法加载以下类 package com project alice entities import javax persistence Entity import javax persistence GeneratedV
  • 设置对话框的最大高度,然后允许滚动

    我似乎无法理解如何正确设置 jquery ui 对话框的高度 我希望它显示存在的内容的高度 但如果它超过 400 像素 那么我需要一个滚动条 因此 如果内容的高度为 200 像素 则对话框的高度应为 200 像素 如果内容的高度大于 400
  • graphviz 中跨越多行的记录

    我试图用点语言可视化一个相当复杂的结构 因为记录很大 所以我想把代码写成多行 所以而不是 A11 label A 11 Access Control A 11 1 Business requirements for access contr
  • Bash 变量替换和字符串

    假设我有两个变量 a AAA b BBB 我从文件中读取了一个字符串 该字符串如下 str a b 如何从替换变量的第一个字符串创建一个新字符串 newstr AAA BBB bash questions tagged bash多变的间接没
  • 使用 libtorrent-python 下载 Torrent

    我有以下 python 代码 import libtorrent as lt import time ses lt session ses listen on 6881 6891 params save path home download
  • iOS 15 TabView导航栏透明度问题

    新的 iOS 15 使导航栏背景完全透明 如果后面没有元素 如果有一个列表并且您将元素滚动到导航栏后面 这将获得白色半透明背景 但如果我使用 TabView 其中每个 TabItem 都有一个在选项卡项目之间切换时 导航栏背景内的列表未正确
  • 如何在bash中找到字符串中最后分组的数字

    这是一个后续问题this https stackoverflow com q 51923800 10247894问题 关于如何知道字符串中分组数字的数量 In bash 如何找到字符串中最后一次出现的一组数字 所以 如果我有 string
  • Xamarin 表单(跨平台):ListView 中的多种类型的单元格

    I am new to Xamarin I have a requirement where I have to implement a ListView or say tableView that have multiple differ
  • TortoiseGit 使用不正确的 SSH 密钥

    我现在有一个关于乌龟git的奇怪问题 我无法弄清楚 当尝试提交到 github 上的存储库时 出现错误 错误 对 key2 的 martindevans Hermes git 权限被拒绝 Key2 是我用来访问不同 github 存储库的密
  • 我可以一成不变地借用 self 来实现 self.callbacks: Vec> 吗?

    pub struct Notifier lt a T gt callbacks Vec
  • 如果启用了热模块替换,为什么在更改 HTML 时 LiveReload 在 Webpack 中不起作用?

    如果你设置hot true in the devServer设置在Webpack 那么模块热更换CSS 有效 并且无需重新加载完整页面即可应用更改 但是当改变HTML文件时 实时重载由于某种原因不起作用 您需要手动刷新页面才能应用更改 If
  • 'Object.ReferenceEquals' 始终为 false,因为它是使用值类型调用的

    当我使用slSvcUtil exe要创建我的服务客户端文件 我看到如下代码 private string CategoryField System Runtime Serialization DataMemberAttribute publ