序列化 IEnumerator使用收益回报创建
有没有办法序列化(使用 BinaryFormatter
)当我使用 yield return
时创建的 IEnumerator
?自动生成的类未标记为“可序列化”。
Is there a way to serialize (using BinaryFormatter
) the IEnumerator<T>
that gets created when I use yield return
s? The autogenerated class isn't marked Serializable
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
只需迭代枚举器并序列化返回的每个实例即可。
Just iterate the enumerator and serialize each instance returned.
编译器生成的枚举没有应用 [Serializable] 属性,因此,不,开箱即用,您不能执行此操作。
你应该问自己,“为什么我在这里使用yield,一旦这个对象被反序列化,它意味着什么?”
如果方便的话,可以用它来填充一个可以序列化的类型。如果您使用它以惰性方式执行一些繁重的工作,您可能需要考虑更改您的设计以序列化/反序列化执行该繁重工作所需的信息。
The compiler generated enumerable does not have the [Serializable] attribute applied to it, so, no, out of the box you cannot do this.
You should ask yourself, "Why am I using a yield here, and what does it mean once this object is deserialized?"
If its convenience, you can use it to fill a type that can be serialized. If you use it to perform some heavy lifting in a lazy manner, you might want to consider changing your design to serialize/deserialize the information you need to perform that heavy lifting.
您使用哪个类来实现
IEnumerable
?List
应该可以序列化。在序列化集合之前,尝试对集合调用
ToList()
。Which class are you using to implement
IEnumerable<T>
?List<T>
should serialize OK.Try calling
ToList()
on your collection before serializing it.