首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么用动态参数调用泛型局部函数会产生BadImageFormatException?

为什么用动态参数调用泛型局部函数会产生BadImageFormatException?
EN

Stack Overflow用户
提问于 2017-08-04 07:02:33
回答 2查看 1.1K关注 0票数 21

在使用C# 7的本地函数时,我发现了一些有趣的行为。考虑以下程序:

代码语言:javascript
复制
public void Main()
{
    Console.WriteLine("Entered Main");
    DoSomething("");
}

private void DoSomething(object obj)
{
    Console.WriteLine("Entered DoSomething");
    Generic((dynamic)obj);
    GenericLocal(obj);
    GenericLocal((dynamic)obj); // This breaks the program

    void GenericLocal<T>(T val) => Console.WriteLine("GenericLocal");
}

private void Generic<T>(T val) => Console.WriteLine("Generic");

这会产生以下结果:

已输入Main

..。然后抛出一个BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)。堆栈跟踪:

代码语言:javascript
复制
   at UserQuery.DoSomething(Object obj)
   at UserQuery.Main()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

(我在LINQPad中运行它,但我从dotnetfiddle得到了类似的结果。)

删除代码中指定的行将产生预期的输出:

已输入Main

输入的DoSomething

通用

GenericLocal

有谁能解释一下原因吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-08 01:37:05

这个turned out to be a bug,但当dotnet团队研究它时,他们意识到他们不能轻易地修复问题,所以本地泛型方法的工作方式与非本地泛型方法的工作方式相同。所以取而代之的是they opted,让编译器在你尝试这样做的时候产生一个错误。

CS8322无法将具有动态类型的参数传递给具有推断类型参数的泛型局部函数“”GenericLocal“”。

票数 2
EN

Stack Overflow用户

发布于 2017-09-14 21:11:30

当您稍微帮助编译器时,代码将不会崩溃:

代码语言:javascript
复制
GenericLocal<dynamic>((dynamic)obj); // This doesn't break the program
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45495869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档