के साथ IENumerable
<T
> ऑब्जेक्ट देता है, जहां टी मेरा "ग्राम" वर्ग है, जो इस क्वेरी के परिणामों से भरा हुआ है। कुछ परिणाम दोहराया गया है तो मैं एक अलग तो की तरह, IEnumerable वस्तु पर() प्रदर्शन करने के लिए करना चाहते हैं:
public IEnumerable<Village> GetAllAlliances()
{
try
{
IEnumerable<Village> alliances =
from alliance in xmlDoc.Elements("Village")
where alliance.Element("AllianceName").Value != String.Empty
orderby alliance.Element("AllianceName").Value
select new Village
{
AllianceName = alliance.Element("AllianceName").Value
};
// TODO: make it work...
return alliances.Distinct(new AllianceComparer());
}
catch (Exception ex)
{
throw new Exception("GetAllAlliances", ex);
}
}
के रूप में डिफ़ॉल्ट comparer गांव वस्तु के लिए काम नहीं होता है, मैं एक कस्टम एक के रूप में देखा लागू किया, यहाँ AllianceComparer कक्षा में:
public class AllianceComparer : IEqualityComparer<Village>
{
#region IEqualityComparer<Village> Members
bool IEqualityComparer<Village>.Equals(Village x, Village y)
{
// Check whether the compared objects reference the same data.
if (Object.ReferenceEquals(x, y))
return true;
// Check whether any of the compared objects is null.
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
return false;
return x.AllianceName == y.AllianceName;
}
int IEqualityComparer<Village>.GetHashCode(Village obj)
{
return obj.GetHashCode();
}
#endregion
}
अलग() विधि काम नहीं करता है, जैसा कि मैंने साथ या इसके बिना परिणामों के बिल्कुल वैसा ही नंबर है। एक और बात, और मुझे नहीं पता कि यह आमतौर पर संभव है, लेकिन मैं यह देखने के लिए कि क्या समस्या हो सकती है, मैं AllianceComparer.Equals() में कदम नहीं उठा सकता।
मुझे इंटरनेट पर इसका उदाहरण मिला है, लेकिन मैं अपना कार्यान्वयन कार्य नहीं कर सकता।
उम्मीद है कि यहां कोई व्यक्ति यहां देख सकता है कि क्या गलत हो सकता है! अग्रिम धन्यवाद!
आपका पकड़/फेंक निर्माण इसे बनाता है जहां कॉलिंग फ़ंक्शन अब पकड़ने (ArgumentException) या पकड़ (IOException) (उदाहरण) को चुनने का विकल्प नहीं चुन सकता है। इस मामले के लिए, आप संभवतः एक साथ प्रयास/पकड़ को हटाने से बेहतर हैं - इसके अलावा, विधि का नाम अपवाद स्टैकट्रेस संपत्ति का हिस्सा होगा। –