簡體   English   中英

C#如何能夠復制結構的mem而不能測試相等性?

[英]How is it that C# is able to copy the mem of a struct but not able to test for equality?

我可以將一個結構的值分配給另一個結構,並自動復制內存。 但是,如果我想測試兩個結構是否包含相同的數據(就好像我剛剛完成了一個賦值),我必須對其進行顯式編碼。 這是為什么? 看起來框架應該有一個默認的operator == for structs實現。

ValueType.Equals的默認實現完全符合您的要求。 所以,如果你這樣做:

s1 = ...;
s2 = ...;
s1.Equals(s2);

對“Equals”的調用將進行您正在尋找的自動深度比較。

通常,C#傾向於不使用重載運算符,這可能是它不實現運算符的原因。

而且,從哲學上講,C#傾向於回避隱式行為,包括隱式生成方法等。

該框架具有默認的Equals實現。 ==運算符是一個C#功能,您必須自己實現,如果您願意,可以使用Equals

如果您具有執行本機代碼權限,則只需調用memcmp

static class memcmpsig<T> where T : struct
{
    [DllImport("msvcrt.dll", CallingConvention=CallingConvention.Cdecl)]
    static extern int memcmp(ref T left, ref T right, UIntPtr count);
}

static class CompareExtension
{
    int CompareTo<T>(this T left, T right) { return memcmpsig<T>::memcmp(left, right, Marshal::SizeOf(typeof(T));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM