Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# में IStructuralEquatable इंटरफेस क्या करता है?

C# में IStructuralEquatable इंटरफेस

IStructuralEquatable इंटरफेस (System.Collections) स्ट्रक्चरल इक्वैलिटी (मान-आधारित समानता) की तुलना के लिए मेथड्स परिभाषित करता है। दो ऑब्जेक्ट्स स्ट्रक्चरल रूप से समान हैं यदि उनके संबंधित एलिमेंट्स समान हैं।

मेथड्स

मेथडविवरण
Equals(object other, IEqualityComparer comparer)निर्धारित करता है कि वर्तमान इंस्टेंस निर्दिष्ट ऑब्जेक्ट के बराबर है या नहीं, दिए गए कम्पैरर का उपयोग करके।
GetHashCode(IEqualityComparer comparer)दिए गए कम्पैरर का उपयोग करके हैश कोड लौटाता है।

कौन इम्प्लीमेंट करता है?

  • Array (सभी एरे)
  • Generic Tuple क्लासेस: Tuple<T1>, Tuple<T1,T2>, Tuple<T1,T2,T3>, आदि।

उदाहरण: Tuple तुलना

using System;
using System.Collections;

class Program {
    static void Main() {
        var tuple1 = Tuple.Create(26.3, double.NaN, 35.6);
        var tuple2 = Tuple.Create(26.3, double.NaN, 35.6);
        
        // डिफ़ॉल्ट इक्वैलिटी (रेफरेंस) -> false
        Console.WriteLine($"Default Equals: {tuple1.Equals(tuple2)}");
        
        // स्ट्रक्चरल इक्वैलिटी (मान-आधारित)
        IStructuralEquatable structural = tuple1;
        bool equal = structural.Equals(tuple2, EqualityComparer<object>.Default);
        Console.WriteLine($"Structural Equals: {equal}"); // true
        
        // NaN तुलना: डिफ़ॉल्ट कम्पैरर NaN == NaN को true मानता है
        Console.WriteLine($"double.NaN == double.NaN: {double.NaN == double.NaN}"); // false
        Console.WriteLine($"EqualityComparer.Default: {EqualityComparer<double>.Default.Equals(double.NaN, double.NaN)}"); // true
    }
}

आउटपुट

Default Equals: False
Structural Equals: True
double.NaN == double.NaN: False
EqualityComparer.Default: True

मुख्य बिंदु

  • Equals में IEqualityComparer पास करके तुलना लॉजिक कस्टमाइज़ कर सकते हैं।
  • टपल्स और एरे के लिए बिल्ट-इन; अपनी क्लासेस के लिए मैन्युअली इम्प्लीमेंट करें।
  • स्ट्रक्चरल इक्वैलिटी डीप तुलना है (नेस्टेड एलिमेंट्स की तुलना)।
  • IEqualityComparer के साथ केस-इनसेंसिटिव स्ट्रिंग तुलना, कस्टम टॉलरेंस (फ्लोट्स के लिए) आदि संभव।

कस्टम कम्पैरर उदाहरण

// फ्लोट तुलना टॉलरेंस के साथ
public class FloatToleranceComparer : IEqualityComparer<double> {
    private readonly double _tolerance;
    public FloatToleranceComparer(double tolerance) => _tolerance = tolerance;
    
    public bool Equals(double x, double y) => Math.Abs(x - y) < _tolerance;
    public int GetHashCode(double obj) => obj.GetHashCode();
}

// उपयोग
var t1 = Tuple.Create(1.0001, 2.0);
var t2 = Tuple.Create(1.0002, 2.0);
var structural = (IStructuralEquatable)t1;
bool eq = structural.Equals(t2, new FloatToleranceComparer(0.001)); // true
  1. ट्विटर पर बायो का क्या मतलब है? ट्विटर पर बायो का क्या मतलब है?

    ट्विटर बायो आपकी ट्विटर प्रोफाइल सेट करने का एक घटक है। यह आपके नाम और ट्विटर हैंडल के नीचे आपकी प्रोफाइल पर दिखाई देता है। इसका उपयोग दूसरों को संक्षिप्त परिचय देने के लिए करें कि आप कौन हैं, अपनी रुचियों को सूचीबद्ध करें, या अपने व्यवसाय को बढ़ावा दें। अपना बायो कैसे बदलें आप अपनी प्रोफाइल एडिट

  1. - जावा 9 में इंटरफेस में प्राइवेट मेथड के नियम क्या हैं?

    जावा 9 ने इंटरफेस में प्राइवेट मेथड की नई सुविधा जोड़ी। प्राइवेट मेथड को प्राइवेट मॉडिफायर का उपयोग करके परिभाषित किया जा सकता है। हम जावा 9 से इंटरफेस में प्राइवेट और प्राइवेट स्टेटिक मेथड दोनों जोड़ सकते हैं। इंटरफेस में प्राइवेट मेथड के नियम: एक प्राइवेट मेथड का इंटरफेस में बॉडी होता है मतलब हम

  1. - पायथन में &= ऑपरेटर क्या करता है?

    &= ऑपरेटर object.__iand__() फ़ंक्शन के लिए सिंटैक्टिक शुगर है। पायथन डॉक्स से: ये मेथड ऑगमेंटेड अंकगणितीय असाइनमेंट (+=, -=, *=, @=, /=, //=, %=, **=, <<=, >>=, &=, ^=, |=) को इम्प्लीमेंट करने के लिए कॉल किए जाते हैं। ये मेथड इन-प्लेस ऑपरेशन (self को मॉडिफाई करना) करने का प्रयास करना चा