Assembly上进行反思,有一些类型是由yield return生成的,是否有可靠的方法将它们过滤掉?Type生成的yield return没有默认的构造函数。它是一个class,而不是一个值类型。如何创建这个类的实例?生成的类型名如下所示:SomeNamespace.RootMode+<GetMouseArrow>d__1,其中RootMode是类名,GetMouseArrow是其中包含yield-return的函数。
用例:序列化正在运行的应用程序的完整状态,包括yield-return语句的状态
更新:
yield return生成的类型有一个公共构造函数,该构造函数以int作为参数。这是状态变量,用于确定IEnumerator在函数中的位置。private和sealed,它们实现了一组IEnumerator*/IEnumerable*接口。[CompilerGenerated]属性设置为它。发布于 2015-02-13 00:50:09
[CompilerGenerated]最有可能是你想要的。它不仅用于“迭代器方法”(您所描述的特性的名称),而且如果您希望筛选出类型,您可能希望筛选出所有编译器生成的类型(也包括为匿名方法和async方法生成的类型)。
至于实例化这类的实例,您可以使用反射,但当然您必须标识要传递的参数并使用适当的构造函数重载。如果没有默认的构造函数,通常的序列化技术就无法工作;您必须自己实现一些东西才能显式地处理这个问题。即在序列化时从类实例中获取适当的值,然后将其传递给构造函数…。当然,要完全恢复类的状态,您需要序列化所有私有字段,并在反序列化时再次还原这些字段,所有这些都是通过反射实现的。
我希望实现这一目标的价值对你来说非常高,因为成本肯定会很高。:)
https://stackoverflow.com/questions/28468895
复制相似问题