gpt4 book ai didi

c# - 是 Delegate.CreateDelegate 无法绑定(bind)到结构成员覆盖的错误吗?

转载 作者:太空狗 更新时间:2023-10-29 23:53:05 25 4
gpt4 key购买 nike

在遵循这个问题的答案后,我发现我必须使用 ref 参数来调用结构上的实例方法。 How can I create an open Delegate from a struct's instance method?

我似乎无法像显式接口(interface)实现那样绑定(bind)到方法覆盖(以避免相关的装箱惩罚,(就 IL 而言,它们实际上是覆盖)),这是一个错误报告,指出在 .NET 的 future 版本中,我们可以绑定(bind)到在结构上找到的接口(interface)成员: https://connect.microsoft.com/VisualStudio/feedback/details/574959/cannot-create-open-instance-delegate-for-value-types-methods-which-implement-an-interface?wa=wsignin1.0#details

但即使尝试绑定(bind)到像 EqualsGetHashCodeToString 这样的成员也会导致错误例如

public struct A
{
public override int GetHashCode(){/*implementation goes here*/}
}
delegate TRet FuncByRef<TStruct,TRet>(ref TStruct) where TStruct:struct

...

Delegate.CreateDelegate(typeof(FuncByRef<A,int>),typeof(A).GetMethod("GetHashCode"));

将失败并出现异常“Error binding to target method”。

最佳答案

让编译器担心它怎么样,即

public static string SomeHelper(A obj) {
return obj.SomeMethod();
}

然后绑定(bind)到“SomeHelper”。这也可能是需要的通用方法,它将使用神奇的“约束”操作码。

这也类似于

Func<A string> func = obj => obj.SomeMethod();

如果您使用反射来获取方法,您可以尝试 DynamicMethod。

关于c# - 是 Delegate.CreateDelegate 无法绑定(bind)到结构成员覆盖的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4327121/

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