问题标签 [equality]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - 如何区分泛型中的MethodBase
我有一个基于
键是从 MethodBase.GetCurrentMethod 呈现的。在明确声明方法之前,一切正常。但有一天,似乎:
当 T 获得完全不同的类型时,在 Dictionary 中输入相同的条目。
所以我的问题是关于为泛型方法缓存值的更好方法。(当然我可以提供提供 GetCache 和相等遇到的泛型类型的包装器,但这种方式看起来并不优雅)。
在这里更新 我真正想要的:
java - 如何在某处使用 java.util.Locale 作为键?
java.util.Locale
是我想知道我是否太愚蠢或写它的人的那些课程之一。马克戴维斯在吗?
据我所知,这个类不应该被使用。类中的内部缓存是私有的。工厂包私有。equals()
用于==
比较字符串。这意味着我无法比较类的实例是否相等,除非我自己创建实例,将它们放入某个缓存中,违反 DRY。
这是我应该做的吗?这种行为有合理的解释吗???
.net - .net 3.5 列表平等和GetHashCode
我在具有 List<T>
作为属性的自定义类中实现 IEquatable,如下所示:
在尝试实现 Equals 和 GetHashCode 方法时,我担心 List 。具体来说, List <T>
.Equals 会评估其内容的相等性吗?List <T>
.GetHashCode 也是如此?
c# - Lambda 表达式编译
给定下面的 lambda 表达式,其中 Province 类型包含一个公共属性“byte CountryId”,而 Country 类型包含一个公共属性“byte Id”。
该表达式后来被 NHibernate Linq 提供程序使用并引发了异常。当我检查表达式变量 exp 时,我发现等式运算符的两边都转换为 Int32。
我不明白为什么两个字节值的相等运算符需要事先将这些值转换为 Int32 。我直接写了表达式,没有让编译器为我做。以下表达式由 NHibernate Linq 提供程序转换得很好。
所以,编译器输出带有类型转换的表达式一定是有原因的。有任何想法吗?
nhibernate - nhibernate:实现平等的最佳实践是什么?
我认为实体应该默认通过主键比较实现相等,但是 nhibernate 文档建议使用业务标识:
最明显的方法是通过比较两个对象的标识符值来实现 Equals()/GetHashCode()。如果值相同,则两者必须是同一数据库行,因此它们相等(如果将两者都添加到 ISet,则 ISet 中将只有一个元素)。不幸的是,我们不能使用这种方法。NHibernate 只会将标识符值分配给持久的对象,新创建的实例不会有任何标识符值!我们建议使用业务键相等来实现 Equals() 和 GetHashCode()。
业务键相等意味着 Equals() 方法仅比较形成业务键的属性,该键将识别我们在现实世界中的实例(自然候选键)
还有这个例子(也来自文档):
这让我头晕目眩,因为业务标识的概念(根据示例)与语法比较相同,这基本上是我与 ValueObjects 相关联的语义类型。不使用数据库主键作为比较值的原因是因为如果主键不是在客户端生成(例如增量)并且您使用某种哈希表集合(例如 ISet),这将更改对象的哈希码用于存储您的实体。
如何创建一个不违反相等/哈希码 ( http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx ) 的一般规则并符合 nhibernate 规则的良好相等实现?
c# - Object equality in .NET
I feel pretty ignorant asking this, but would someone be able to explain to me why this is happening?
This makes sense to me were I using pointers and all that great stuff, but I was under the impression that with C# that "b" would remain independent from "a."
Am I just using some terribly bad practice? Maybe someone could point me towards something that explains why this is so in C#?
Thanks.
javascript - JavaScript == 什么时候比 === 更有意义?
在JavaScript 比较中应该使用哪个等号运算符(== vs ===)?表示它们基本相同,除了 ' ===
' 还确保类型相等,因此 ' ==
' 可能执行类型转换。在 Douglas Crockford 的JavaScript: The Good Parts中,建议始终避免使用 ' ==
'。但是,我想知道设计两组相等运算符的最初想法是什么。
你有没有看到使用' ==
'实际上比使用' ===
'更合适的情况?
java - Apache Commons ObjectUtils equals 方法测试哪种相等?
我一直理解Java中有两种类型的相等,
- 值相等:使用该
.equals()
方法测试两个对象在非空对象引用上实现等价关系。 - 引用相等:使用
==
运算符来测试两个原始类型或内存位置是否相等。
以下页面更详细地描述了这些语言基础知识。
- Wikibooks Java 编程:Java 编程/比较对象
- xyzws Java EE 常见问题解答:相等运算符和 equals 方法有什么区别?
- Java 平台 API:Object.equals() 的 Javadoc
- Java 语言规范:等式运算符
这些链接都没有明确指定如果null
比较两个对象引用的值相等应该发生什么。隐含的假设是应该抛出 a ,但这不是ObjectUtils.equals()NullPointerException
方法所做的,它可能被认为是最佳实践实用方法。
让我担心的是,Apache Commons似乎已经通过后门有效地将第三种平等措施引入了 Java,而本已令人困惑的情况可能会变得更加复杂。我称它为第三种相等性度量,因为它尝试测试值相等性,当失败时,它会退回到测试引用相等性。Apache Commons 相等测试与值相等和引用相等有许多相似之处,但也有明显不同。
我是否应该担心并希望尽可能避免使用ObjectUtils.equals()
?
是否有理由声称ObjectUtils.equals()
提供了其他两种平等措施的有用结合?
选择的答案
在这个问题上似乎没有达成共识,但我决定将 Bozho 标记为正确,因为他最能引起我的注意,我现在认为这是 null-safe equals 检查的最大问题。我们都应该编写快速失败的代码来解决为什么要比较两个空对象的值相等的根本原因,而不是试图将问题扫到地毯下。
java - Java 对象相等
两张牌 c1 和 c4 似乎是相等的……但它们不是为什么。我希望它们相等,以便集合中只允许其中一个。:|
python - Python __init__ argument problem
I have some trouble understanding what happens with class init arguments that are lists
like:
or:
#xA;or:
#xA;This can't be done because the default value for every A
object would point to the same piece of memory. I can't really understand what happens here and how it happens.