草庐IT

assert_equal

全部标签

c# - Debug.Assert 出现在 Release模式

我们都知道Debug.Assert在release模式下编译时不会被编译成dll。但出于某种原因,Debug.Assertdid出现在我编写的组件的发布版本中。我怀疑我可能弄乱了我的csproject设置。知道为什么Debug.Assert出现在Release模式中吗?P/S:在问这个问题之前,我已经仔细检查以确保我确实是在Release模式下编译的。注意2:我仔细检查了我的csproject,发现在Release配置中,DefineDEBUGconstant没有被勾选,这表明对于这部分我的设置是正确的。 最佳答案 检查Define

c# - 在 Dictionary 与 HashCode 和 Equals() 中使用 IEqualityComparer 的效率

我觉得标题很清楚。我想知道使用IEqualityComparer时是否有一定的效率开销在Dictionary提供一个时它是如何工作的?谢谢 最佳答案 它更快吗?从游戏开发者的角度来看,如果您的键是值类型(结构、原语、枚举等),则提供您自己的EqualityComparer明显更快-因为EqualityComparer.Default将值框起来。作为一个真实的例子,ManagedDirectX广告牌示例曾经以大约C++版本速度的30%运行;所有其他样本的运行速度约为90%。这样做的原因是广告牌是使用默认比较器排序的(因此被装箱),因为

c# - 使用 IEqualityComparer 和 Equals/GethashCode Override 有什么区别?

当我使用字典时,有时我必须更改默认的Equals含义才能比较键。我看到,如果我重写键类上的Equals和GetHashCode,或者我创建一个实现IEqualityComparer的新类,我会得到相同的结果。那么使用IEqualityComparer和Equals/GethashCodeOverride有什么区别呢?两个例子:classCustomer{publicstringname;publicintage;publicCustomer(stringn,inta){this.age=a;this.name=n;}publicoverrideboolEquals(objectobj)

c# - 为什么在 Hashset 或其他集合中使用继承对象时 Equals(object) 胜过 Equals(T)?

我知道我总是必须重写Equals(object)和GetHashCode()实现时IEquatable.Equals(T).但是,我不明白,为什么在某些情况下Equals(object)胜过通用Equals(T).例如,为什么会发生以下情况?如果我声明IEquatable为接口(interface)实现具体类型X对于它,将军Equals(object)被Hashset调用在将这些类型的项目相互比较时。在所有其他情况下,至少有一侧被转换为界面,正确的Equals(T)被称为。这里有一个代码示例来演示:publicinterfaceIPerson:IEquatable{}//Simplee

c# - 定义运算符 == 但不定义 Equals() 或 GetHashCode() 有什么问题?

对于下面的代码publicstructPerson{publicintID;publicstaticbooloperator==(Persona,Personb){returna.Equals(b);}publicstaticbooloperator!=(Persona,Personb){return!a.Equals(b);}}为什么编译器会给我这些警告?不定义下面的方法有什么问题?warningCS0660:'Person'definesoperator==oroperator!=butdoesnotoverrideObject.Equals(objecto)warningCS06

c# - 在 C# 中,Debug.Assert 测试是否以 Release模式运行?

举个例子:publicvoidFoo(){//Code...Debug.Assert(ExpensiveTest());//Code...}当我在Release模式下编译时,Debug.Assert方法会发生什么情况?ExpensiveTest()还会运行吗?如果不是,那么它是如何工作的(因为它不是可以设置为无求值的宏)?如果它确实运行了,那不是破坏了调试断言的目的吗? 最佳答案 WhathappenstothetheDebug.AssertmethodwhenIcompileinreleasemode?它已完全删除(包括对Expe

c# - 从 Where(l => l.Side == 'A' ) 与 Where(l => l.Side.Equals ('A' ) 产生的不同 SQL

我一直在LinqPad中试验查询。我们有一个表Lot,其中有一列Sidechar(1)。当我编写linqtosql查询Lots.Where(l=>l.Side=='A')时,它会生成以下SQL--RegionParametersDECLARE@p0Int=65--EndRegionSELECT...,[t0].[Side],...FROM[Lot]AS[t0]WHEREUNICODE([t0].[Side])=@p0但是,使用Lots.Where(l=>l.Side.Equals('A')),它产生--RegionParametersDECLARE@p0Char(1)='A'--End

C#:static object.Equals 如何检查是否相等?

假设您有两个不同的类,每个类都有自己的Equals实现;使用哪一个?如果只有其中一个有一个怎么办?还是一个都没有?以下任何行是否等效?object.Equals(first,second)first.Equals(second)second.Equals(first)我猜前两个可能是等价的,但我真的不知道。它到底有什么作用? 最佳答案 基本上它做了三件事:检查引用是否相等(如果是则返回真)检查引用是否为空(如果任一值为null则返回false;此时null==null的情况已经处理完毕)使用first.Equals(second)检

c# - 为调用方法“Boolean Equals”提供的参数数量不正确

为什么我会收到参数异常,提示我将错误数量的参数传递给string.equals方法?我传递了三个参数,这应该是正确的。实际上它应该抛出一个编译时错误而不是运行时...你看到错误了吗?vartranslations=await(fromlincontext.Languagesjointincontext.Translationsonl.ISO639_ISO3166equalst.ISO639_ISO3166wherestring.Equals(l.ApplicationName,applicationName,StringComparison.InvariantCultureIgnore

c# - 从 Visual Studio for C# 的流畅接口(interface)类智能感知中隐藏 GetHashCode/Equals/ToString?

我有一个用于IoC容器注册过程的流畅界面,其中包含一些用于构建注册的类。例如,我可以这样做:builder.Register().From.ConcreteType();但是,在点之后的每一步,智能感知都会弹出,显示Object类的四个标准方法:GetHashCode、Equals、GetType和ToString。我尝试在几个类中覆盖这些方法,并附上EditorBrowsableAttribute归因于每个,但它们仍然出现。我没有办法隐藏它们吗?请注意,我并不是要对类本身隐藏它们,只是要对智能感知隐藏它们。基本上,我想要这样:+---------------+builder.Regi