草庐IT

C# 相等性检查

您为structs编写相等性检查的方法是什么?和classes你创造了?1)“完整”相等性检查是否需要大量样板代码(如overrideEquals、overrideGetHashCode、通用Equals、operator==、operator!=)?2)您是否明确指定您的类模拟IEquatable界面?3)我理解正确吗,没有实际的方法来自动应用Equals覆盖,当我调用类似a==b的东西时我总是必须同时执行Equals和operator==成员? 最佳答案 没错,这是很多样板代码,您需要单独实现所有内容。我会推荐:如果您要完全实现

c# - 为什么类实例的私有(private)成员在 Equals() 方法体中可用?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Whyaremyprivatesaccessible?Whyareprivatefieldsprivatetothetype,nottheinstance?很可能我遗漏了一个明显的事实,但我真的看不出原因:当我覆盖Equals()方法并且当我将对象转换为我的类型时,我能够调用它的私有(private)成员没有任何问题!我正在初始化一个实例,我希望它的私有(private)成员不可访问。但是为什么被转换的对象在Equals()方法中向我开放它的私有(private)?查看下面示例代码中的Equals实现,看看我

c# - == 和 .Equals() 与接口(interface)和 LINQ 之间的区别

我最近收到“不支持接口(interface)成员的映射......”错误,我根据thisthread解决了这个问题.演示:publicinterfaceIMyInterface{stringvalueText{get;set;}}publicclassMyData:IMyInterface{intID{get;set;}stringvalueText{get;set;}}publicclassMyOtherData:IMyInterface{longID{get;set;}stringvalueText{get;set;}}和publicstaticIEnumerableGetByVa

c# - 为什么 Assert.AreEqual() 在比较之前转换为对象?

我正在编写一些单元测试,但以下断言失败了:Assert.AreEqual(expected.Episode,actual.Episode);如果我改为调用它,它会成功:Assert.IsTrue(expected.Episode.Equals(actual.Episode));我曾假设Assert.AreEqual()最终会针对给定的类型调用Equals()方法,在本例中为Episode.Equals()。但是,在Microsoft.VisualStudio.TestTools.UnitTesting.Assert的幕后,我发现了以下代码(由ReSharper反编译):publicst

c# - 对象等于 - 不覆盖等于的纯对象或引用类型的基本逻辑是什么?

看完我就到了this我没有找到相关答案-所以请在阅读整个问题之前不要将其标记为重复。我一直在使用反射器并查看Object.Equals。我看到的是:[__DynamicallyInvokable,TargetedPatchingOptOut("PerformancecriticaltoinlineacrossNGenimageboundaries")]publicvirtualboolEquals(objectobj){returnRuntimeHelpers.Equals(this,obj);}RuntimeHelpers.Equals看起来像这样://System.Runtime.

c#:如何读取文件的一部分? (DICOM)

我想用C#读取DICOM文件。我不想做任何花哨的事情,我只是现在想知道如何读取元素,但首先我实际上想知道如何读取标题以查看是否是有效的DICOM文件.它由二进制数据元素组成。前128个字节未使用(设置为零),后跟字符串“DICM”。紧随其后的是标题信息,这些信息被组织成组。示例DICOMheaderFirst128bytes:unusedDICOMformat.Followedbythecharacters'D','I','C','M'Followedbyextraheaderinformationsuchas:0002,0000,FileMetaElementsGroupsLen:1

c# - 在引用类型上重写 Equals 是否应该始终意味着值相等?

在不对引用类型做任何特殊处理的情况下,Equals()将意味着引用相等(即相同的对象)。如果我选择覆盖Equals()对于引用类型,它是否总是意味着两个对象的值是等价的?考虑这个可变的Person类:classPerson{readonlyintId;stringFirstName{get;set;}stringLastName{get;set;}stringAddress{get;set;}//...}代表同一个人的两个对象将始终具有相同的Id,但其他字段可能会随着时间的推移而有所不同(即在地址更改之前/之后)。对于这个对象,Equals可以定义为不同的意思:值相等:所有字段都相等(

c# - 什么是 Type.GUID,它与 Type.Equals() 有什么关系?

我在尝试将System.RuntimeType的实例与泛型类型TOut进行比较时遇到了一些有趣的行为:TyperuntimeT=methodInfo.ReturnType;//getRuntimeTypeusingreflectionTypegenericT=typeof(TOut);//ThisconditionfailsbecauseruntimeTdoesn't//seemtoincludeanassemblyqualifiednameif(runtimeT.Equals(genericT)){...}这是我的证据:免责声明:我不知道GUID在CLR/类型系统的上下文中到底是什么

c# - 有没有办法在 Visual Studio 中自动生成 equals 和 hashcode 方法

在Java中,当你想通过remove()方法从通用Collection中正确删除对象时,你必须实现equals(Objecto)和remove()方法,可以在Eclipse中自动生成。该方法的示例如下所示--->。如何在C#中自动生成该方法(VisualStudio,我使用的是VS2013)?也许没有必要使List.Remove()方法正常工作?如果不能自动引用Equals方法应该是什么样子?我的意思是它应该是什么样子。Equals()方法甚至用在List.Remove()中吗?如果是这样,你能告诉我Equals()如果我们比较相同的对象(内存中的相同地址),应该实现返回true@Ov

c# - 字符串比较 - strA.ToLower()==strB.ToLower() 或 strA.Equals(strB,StringComparisonType)?

根据标题,您使用什么字符串比较实践,为什么? 最佳答案 您没有指定平台,但我猜是.NET。我强烈建议您使用后一种形式——因为案例比较并不像您预期​​的那么简单。(它也避免了创建额外的字符串,但这是另一回事。)例如,当代码在土耳其运行时出现“mail”和“MAIL”时,您希望您的代码执行什么操作?如果您使用ToLower它将返回false,同样如果您使用CurrentCultureIgnoreCase-但如果您使用InvariantCultureIgnoreCase它将返回true。您需要考虑数据的来源以及您尝试使用它实现的目标。参见