gpt4 book ai didi

c# - 如何深入比较不可序列化的对象?

转载 作者:行者123 更新时间:2023-11-30 17:44:14 29 4
gpt4 key购买 nike

假设我们有两个游标文件,它们被加载到 C# 对象中:

using (var ms = new MemoryStream(Resource.file1))
_cursor1 = new System.Windows.Input.Cursor(ms);

using (var ms = new MemoryStream(Resource.file2))
_cursor2 = new System.Windows.Input.Cursor(ms);

我有理由比较这些对象(例如,假设 file1 可以是 file2 的副本,我想检测它)。我有一个方法试图将对象反序列化为字节数组,以便最终比较此类数组:

public static byte[] ToByteArray(this object obj)
{
var bf = new BinaryFormatter();
using (var ms = new MemoryStream())
{
bf.Serialize(ms, obj);
return ms.ToArray();
}
}

不幸的是,使用会引发序列化错误:

var equal = _cursor1.ToByteArray().SequenceEqual(_cursor2.ToByteArray());

Additional information: Type 'System.Windows.Input.Cursor' in Assembly 'PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' is not marked as serializable.

比较此类对象的方法是什么?

最佳答案

比较内存流以检查它们是否相等要容易得多。

您还可以选择要比较的内容和不比较的内容。如果您尝试比较 Cursor 对象,也许它们具有使它们不同的内部数据,即使它们具有相同的形状。

我想你知道如何比较MemoryStreams,否则就直接说吧。

编辑:好的。据我所知,这是你唯一的选择。反编译游标类后,几乎所有工作都是使用非托管代码完成的,因此您将无法访问它。

  [DllImport("user32.dll", BestFitMapping=false, CharSet=CharSet.Auto, EntryPoint="LoadImage", ExactSpelling=false, SetLastError=true, ThrowOnUnmappableChar=true)]
internal static extern NativeMethods.CursorHandle LoadImageCursor(IntPtr hinst, string stName, int nType, int cxDesired, int cyDesired, int nFlags);

关于c# - 如何深入比较不可序列化的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29917377/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com