【发布时间】:2009-11-07 11:20:13
【问题描述】:
我昨天在 .Net 框架中发现了一个错误,发现这是一个无法修复的已知错误。简而言之,错误是包含类型为 IComparable 的字段的类在将 int(可能还有其他二进制类型)分配给该字段时不能进行二进制序列化和反序列化:
[Serializable]
public class Foo
{
public IComparable Value;
}
如果您尝试序列化(和反序列化)以下两个对象,第一个将成功,第二个将失败:
var s = new Foo { Value = "foo" };
var i = new Foo { Value = 1 };
我在这里更详细地描述了这一点:http://ondevelopment.blogspot.com/2009/11/fix-that-bug-will-ya-no.html
您可以在此处找到错误报告(请注意,此报告是 2006 年的,不是我提交的):http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=91177
这不会被修复,因为“修复的风险超过了它的好处”。我没有看到任何(可行的)场景,这将是一个突破性的变化。所以我的实际问题是,谁能想到一个真正的场景,这将是一个突破性的变化?
【问题讨论】:
-
它与 Mono/gmcs 2.0.1 一起正常工作。
-
@Thomas,这很有趣。实际上,这可能会作为一个错误提交给 Mono 团队,因为据我所知,他们试图反映 BCL 中的错误。
-
微软从来没有对他们的任何系统进行过大的改变,这可能会破坏任何依赖旧东西的预先存在的软件(你好,操作系统膨胀!)。我相信你实际上必须先以某种方式改变整个公司才能解决这个问题。
-
Mono 为 BCL 类提供了完全不同的实现,因此一般来说,Microsoft .NET 问题可能不会影响 Mono。
-
@lextm-MSFT 我知道 Mono 是 BCL 的完全不同的实现,但我也知道它们反映了 BCL 中的已知错误。不记得有什么具体的例子了,但我知道 Miguel 不止一次谈到过这个问题。
标签: .net serialization