[英]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.