反编译应用代码时出现未知矩形字符,求解读方法
反编译出现矩形框字符的解读方法
你看到的矩形框是编译器自动生成的匿名状态机类型。原因是你反编译的Flatten方法属于C#迭代器方法(内部用到了yield return或yield break逻辑),编译器会自动为这类方法生成一个隐藏的状态机类来实现迭代逻辑。这个类的名称是编译器生成的特殊命名(包含<>这类不符合常规标识符规则的字符),多数反编译工具无法正确解析显示,就用矩形框作为占位符。
对应的[IteratorStateMachine(typeof())]特性,作用是标记该方法为迭代器,并关联到这个编译器生成的状态机类型。
可以通过以下方式查看真实的类型信息:
- 使用dnSpy这类更专业的反编译工具,它能正确显示这类编译器生成的类型名称(格式通常类似
<Flatten>d__X,X为数字) - 若使用ILSpy,在设置中开启「显示编译器生成的代码」选项
- 直接查看程序集的IL代码,能明确看到这个状态机类型的完整标识
你反编译的代码片段:
public void Add(MessageErrorCode errorCode); public void Add(SegmentErrorContext segmentContext); public void AddRange(IEnumerable<MessageErrorCode> errorCodes); public void AddRange(IEnumerable<SegmentErrorContext> segmentContexts); [IteratorStateMachine(typeof())] public IEnumerable<string> Flatten(); public void Sort();
内容的提问来源于stack exchange,提问作者Trent Adams
相关产品推荐
相关产品推荐

