序列化匿名委托列表这个问题可能和我的很像,但是我没有看到我需要的答案。我有一个名为CASM的类,它有一个列表。我想序列化这个类(使用BinaryFormatter或类似的东西)。此类和Action引用的所有类都具有正确的[Serializable]和[NonSerializable]属性。尝试序列化时会出现问题-它会引发此错误:在程序集“CASM,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”中键入“CASM.CASM+c__DisplayClass2c”未标记为可序列化。这个c__DisplayClass2c是一个自动生成的内部类,它包含我在我的应用程序中使用的不同类型的匿名委托。但它不是[Serializable],如下图所示:alttexthttp://bayimg.com/image/maebbaacj.jpg更改我的应用程序的最佳方法是什么?制作我自己的c__DisplayClass2c类型的类并使其可序列化?或者,还有更好的方法?编辑:最后我创建了自己的类而不是自动生成的类。我也帮忙调试,其实有一个描述性的名字,不只是b__12()。序列化委托通常没有意义。通常您可以选择将委托字段标记为[NonSerialized]并在需要时重新创建它。如果您的主要目的是存储表示,那么坦率地说,我建议考虑一种完全不同的方法。另外,请注意,如果您计划将数据保留任意时间长度(但对于瞬态数据是可接受的),BinaryFormatter是脆弱的。为了更进一步,我怀疑我们需要看到一些可重现的代码。更新:实际上,我怀疑您可以通过编写自己的显式捕获类(而不是编译器生成的捕获类)来序列化它。但我仍然认为这个概念存在根本性缺陷。手工编写捕获类并不好玩。解决评论中的要点;长期存储-因为它非常脆弱-就像更改一样简单:publicintValue{get;set;}toprivateintvalue;publicintValue{get{returnvalue;}set{if(value将中断序列化;将更改程序集、类型名称、“观看它的乐趣”等代表;对于手动捕获的示例;而不是:inti=...Predicatetest=delegate(Foox){returnx.Bar==i;}你可以这样做:inti=...MyCapturecpt=newMyCapture(i);Predicatetest=cpt.MyMethod;同[Serializable]classMyCapture{privateinti;publicMyCapture(inti){this.i=i;}publicboolMyMethod(Foox){returnx.Bar==i;}}如你所见-并不总是微不足道的(这是最简单的例子。以上就是C#学习教程:连载匿名委托列表分享的全部内容,如果对你有用,需要了解更多C#学习教程,希望大家多多付出关注吧---本文收集自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除,如需转载请注明出处:
