तो, मैं एक कस्टम वर्ग, MyClass
MyClass गुण है, जो अशक्त हो सकता है जिसमें एक सूची है (लेकिन हो नहीं होती हैं)।
जब इस वर्ग को एक कस्टम सॉर्टर का उपयोग करके क्रमबद्ध किया जाता है, जहां सॉर्टर इस शून्य संपत्ति का उपयोग करता है और अपवाद फेंकता है, तो अपवाद को अनचाहे माना जाता है, भले ही सॉर्ट विधि के आसपास एक प्रयास-पकड़ ब्लॉक हो।
अब किसी कारण से अपवाद अभी भी कंसोल पर लिखा जाता है, जो अपवाद हैंडलर कर रहा है।
मेरे पास इस समस्या के साथ एक वास्तविक अनुप्रयोग है, जिससे मेरा यूनिट परीक्षण विफल हो जाता है, भले ही अपवाद सही ढंग से संभाला जा सके और मैं इसे समझा नहीं सकता।
बिना क्रिया के अपवाद क्रमबद्ध
इसलिए मैंने कुछ नमूना कोड संलग्न किया है ताकि मैं खुद को बेहतर समझा सकूं, इसे वीएस से चलाएं।
अपडेट किया गया कोड
परिणाम:
System.InvalidOperationException
सरणी में दो तत्वों की तुलना करने में विफल।
हो गया!
तो ऐसा लगता है कि यह मेरे कस्टम अपवाद को संभालने और अपना खुद का फेंक रहा है?
using System;
using System.Collections.Generic;
using System.Data;
namespace TestSortException
{
class Program
{
static void Main()
{
try
{
var list = new List<MyClass>
{
new MyClass("1"),
new MyClass(null),
new MyClass("fdsfsdf")
};
list.Sort(new MyClassSorter());
}
catch(Exception e)
{
Console.WriteLine(e.GetType());
Console.WriteLine(e.Message);
}
Console.WriteLine("Done!");
Console.ReadLine();
}
}
class MyClassSorter : IComparer<MyClass>
{
public int Compare(MyClass x, MyClass y)
{
// try
// {
if (x.MyString == y.MyString)
return 0;
// Unhandled??? Exception here
if (x.MyString.Length > y.MyString.Length)
return 1;
return -1;
// }
// catch (Exception)
// {
// return -1;
// }
}
}
class MyClass
{
private string _myString;
public string MyString
{
get
{
if (_myString == null) throw new DataException("MyString is Null");
return _myString;
}
}
public MyClass(string myString)
{
_myString = myString;
}
}
}
+1। अब इसे देख रहे हैं। –
आप अपनी तुलना विधि में शून्य की जांच क्यों नहीं करते? यह बेहतर होगा, मैं सोच रहा हूं, फिर ढांचे को अपवाद फेंकने की अनुमति देता हूं। –
क्योंकि मैं अपने अपवाद हैंडलर को बुलबुला करना चाहता हूं, जहां इसे संभाला जाता है। – PostMan