gpt4 book ai didi

c# - Object.Equals(Object, Object) 处的 NullReferenceException

转载 作者:行者123 更新时间:2023-11-30 15:05:05 27 4
gpt4 key购买 nike

情况

我正在使用 ILGenerator 生成包装器。我使用 Object.Equals(Object, Object) 来实现包装字段的相等性比较。调试器会抛出一个 NullReferenceException 以及以下堆栈跟踪。

at System.Object.Equals(Object objA, Object objB)
at HIDDEN.StateTransitionWrapper.op_Equality(StateTransitionWrapper , StateTransitionWrapper )
at HIDDEN.StateTransitionWrapper.Equals(Object )
at System.Object.Equals(Object objA, Object objB)
at HIDDEN.StationEventCompositeWrapper.op_Equality(StationEventCompositeWrapper , StationEventCompositeWrapper )
at HIDDEN.StationEventCompositeWrapper.Equals(Object )
at System.Object.Equals(Object objA, Object objB)
at HIDDEN.CompareResult..ctor(Object object0, Object object1, String fieldName)
....

Object.Equals(Object, Object) - 反汇编

public static bool Equals(object objA, object objB)
{
return objA == objB || (objA != null && objB != null && objA.Equals(objB));
}

正如您在反汇编中看到的那样,任何 NullReferenceException 都不可能发生,因为它不会到达方法调用所在的部分。

可能出现的问题

正如我所说,漏洞代码是使用 ILGenerator 生成的,我认为这可能是错误的唯一可能来源。调用者内部只有值类型,因此对象甚至不可能为空。

调用 IL 代码

IL_0040: ldarg.0
IL_0041: call instance valuetype [HIDDEN]HIDDEN.StationStateType HIDDEN.StateTransitionWrapper::get_StationState()
IL_0046: box [mscorlib]System.Object
IL_004b: ldarg.1
IL_004c: call instance valuetype [HIDDEN]HIDDEN.StationStateType HIDDEN.StateTransitionWrapper::get_StationState()
IL_0051: box [mscorlib]System.Object
IL_0056: call bool [mscorlib]System.Object::Equals(object, object)

最佳答案

box 指令不应该指定您要装箱的类型吗?

例如,你不应该使用...

box System.Int32  // or whatever

...而不是...

box System.Object

关于c# - Object.Equals(Object, Object) 处的 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9485710/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com