अधिकांश लोग, एक रिफेंस प्रकार (कक्षा) लिखते समय आईसीओम्परेबल < टी > लागू करते हैं, इस सम्मेलन का उपयोग करें कि शून्य किसी भी वास्तविक वस्तु से कम है। लेकिन अगर आप विपरीत सम्मेलन इस्तेमाल करने की कोशिश, कुछ दिलचस्प होता है:सॉर्टिंग आईसीओपरपेबल ऑब्जेक्ट्स जिनमें से कुछ शून्य
using System;
using System.Collections.Generic;
namespace SortingNulls
{
internal class Child : IComparable<Child>
{
public int Age;
public string Name;
public int CompareTo(Child other)
{
if (other == null)
return -1; // what's your problem?
return this.Age.CompareTo(other.Age);
}
public override string ToString()
{
return string.Format("{0} ({1} years)", this.Name, this.Age);
}
}
internal static class Program
{
private static void Main()
{
var listOfChilds = new List<Child>
{
null,
null,
null,
null,
new Child { Age = 5, Name = "Joe" },
new Child { Age = 6, Name = "Sam" },
new Child { Age = 3, Name = "Jude" },
new Child { Age = 7, Name = "Mary" },
null,
null,
null,
null,
new Child { Age = 7, Name = "Pete" },
null,
new Child { Age = 3, Name = "Bob" },
new Child { Age = 4, Name = "Tim" },
null,
null,
};
listOfChilds.Sort();
Console.WriteLine("Sorted list begins here");
for (int i = 0; i < listOfChilds.Count; ++i)
Console.WriteLine("{0,2}: {1}", i, listOfChilds[i]);
Console.WriteLine("Sorted list ends here");
}
}
}
ऊपर कोड चल रहा है, आप देखते हैं कि अशक्त संदर्भ के रूप में उम्मीद पृथक नहीं किया जा। जाहिर है, ए से बी की तुलना करते समय, यदि ए ऑब्जेक्ट है और बी शून्य है, तो उपयोगकर्ता द्वारा परिभाषित तुलना का उपयोग किया जाता है, लेकिन यदि विपरीत रूप से ए शून्य है और बी एक ऑब्जेक्ट है, तो इसके बजाय कुछ बीसीएल तुलना का उपयोग किया जाता है।
क्या यह एक बग है?
अच्छा जवाब। मैंने यह नहीं देखा था कि प्रलेखन ने कहा था कि किसी ऑब्जेक्ट को शून्य से अधिक की तुलना करनी चाहिए। जब ए शून्य है और बी शून्य नहीं है, तो फ्रेमवर्क * ए और बी को बदल सकता है, जिसे मेरी विधि कहा जाता है, और फिर लौटाए गए इंट 32 के संकेत को फ़्लिप कर दिया। मुझे लगता है कि कभी-कभी पुराने नोंगनेरिक आईसीओपरपेबल के साथ होता है। निश्चित रूप से एक आईसीओएमपेयर या एक तुलना प्रतिनिधि के साथ पहले पैरामीटर के रूप में शून्य को संभालना आसान है। –
JeppeSN