C # ішіне тасталатын ерекше жағдайдың ерекшелігін қалай табуға болады?

Ерекшеліктерді құжаттамайтын кітапхананы пайдаланамын. Бұл кітапхана компания жасаған өніммен байланысу үшін пайдаланылады. Мен алып тастаған ерекшеліктердің арасындағы айырмашылықты қалайтын болғым келеді, бірақ ерекше жағдайлардың атауларын білмеймін (мысалы, байланыс кернеуінің немесе кернеудің кернеуі арасындағы байланыс).

Олардың барлық мысалдары тек catch (Exception ex) пайдаланады. Жеке қателерді ұстау үшін маған қажет нәрсені қалай табуға болады? Мен ex.toString() жасаған кезде келесідей нәрсе аламын:

System.Exception: Timeout
    at CMLCOMLib.EcatObj.Initialize()
    at copley_cmo_test.MainWindow.btnConnect_Click(Object sender, RoutedEventArgs e)
in c:\Users\adam.siembida\Desktop\copley_cmo_test\copley_cmo_test\MainWindow.xaml.cs:line 41
1
Сіз нақты түрін алу үшін ex.GetType() пайдалана аласыз, бірақ ерекше жағдайдан Exception тікелей тастағандай көрінеді.
қосылды автор Lee, көзі
Сіз нақты түрін алу үшін ex.GetType() пайдалана аласыз, бірақ ерекше жағдайдан Exception тікелей тастағандай көрінеді.
қосылды автор Lee, көзі

10 жауаптар

Бұл:

System.Exception: Timeout

System.Exception , мысалы, жай ғана тастағанын көрсетеді.

if (weHaveNoApiDesignSkills)
{
    throw new Exception("Timeout");
}

Мүмкін, жақсы жобаланған кейбір ерекшеліктері бар, бірақ көрсеткеніңіз перспективалы емес :(

Өкінішке орай, сіз хабарламаны қоспағанда қоспаңыз (олардың әрқайсысы әрқашан жаман идея). Кітапхананың авторларына болашақ босату үшін мәселелерді жақсарта алатынын білуді сұраған жөн.

11
қосылды
@ w1res: Бұл өте нәзік - әзірлеуші ​​шығарылымдар арасындағы хабарды өзгерте алады, мысалы: қателерді түзету. Кейбір әзірлеушілер өздерінің хабарламаларын интернационализациялау туралы шешім қабылдауы мүмкін.
қосылды автор Jon Skeet, көзі
Мен әрдайым хабарламамен ерекшеленудің жаман идеясы
қосылды автор matt-dot-net, көзі
Тек +1 код үлгісі үшін. :)
қосылды автор Chris, көзі
Егер қандай да бір жақсы болса, ерекшеліктердің нақты түрлерін қалай анықтау керектігі туралы түсініктеме беру жақсы болар еді.
қосылды автор Chris, көзі
Неліктен хабарлар бойынша бөлінуі нашар?
қосылды автор w1res, көзі

Бұл:

System.Exception: Timeout

System.Exception , мысалы, жай ғана тастағанын көрсетеді.

if (weHaveNoApiDesignSkills)
{
    throw new Exception("Timeout");
}

Мүмкін, жақсы жобаланған кейбір ерекшеліктері бар, бірақ көрсеткеніңіз перспективалы емес :(

Өкінішке орай, сіз хабарламаны қоспағанда қоспаңыз (олардың әрқайсысы әрқашан жаман идея). Кітапхананың авторларына болашақ босату үшін мәселелерді жақсарта алатынын білуді сұраған жөн.

11
қосылды
@ w1res: Бұл өте нәзік - әзірлеуші ​​шығарылымдар арасындағы хабарды өзгерте алады, мысалы: қателерді түзету. Кейбір әзірлеушілер өздерінің хабарламаларын интернационализациялау туралы шешім қабылдауы мүмкін.
қосылды автор Jon Skeet, көзі
Мен әрдайым хабарламамен ерекшеленудің жаман идеясы
қосылды автор matt-dot-net, көзі
Тек +1 код үлгісі үшін. :)
қосылды автор Chris, көзі
Егер қандай да бір жақсы болса, ерекшеліктердің нақты түрлерін қалай анықтау керектігі туралы түсініктеме беру жақсы болар еді.
қосылды автор Chris, көзі
Неліктен хабарлар бойынша бөлінуі нашар?
қосылды автор w1res, көзі

catch (Exception ex) сияқты тұтқалы құрылымды ұстаңыз, содан кейін ex.GetType() арқылы қайтарылған Түрі мәнін тексеріңіз. Егер typeof (Exception) тең болса, олар Exception дегенге қарағанда нақты ештеңе тастамайды дегенді білдіреді.

4
қосылды

catch (Exception ex) сияқты тұтқалы құрылымды ұстаңыз, содан кейін ex.GetType() арқылы қайтарылған Түрі мәнін тексеріңіз. Егер typeof (Exception) тең болса, олар Exception дегенге қарағанда нақты ештеңе тастамайды дегенді білдіреді.

4
қосылды

мысалы, декомпиляторды қолданыңыз:

http://www.jetbrains.com/decompiler/

in .net бағдарламасында java секілді нақты ерекшелік декларациясы жоқ.

1
қосылды

мысалы, декомпиляторды қолданыңыз:

http://www.jetbrains.com/decompiler/

in .net бағдарламасында java секілді нақты ерекшелік декларациясы жоқ.

1
қосылды

Айтпақшы, алып тастаған кезде тоқтасаңыз (мысалы, аулау блогында), терезе терезесінде $ exception енгізсеңіз, барлық қоспаны көресіз.

0
қосылды

Айтпақшы, алып тастаған кезде тоқтасаңыз (мысалы, аулау блогында), терезе терезесінде $ exception енгізсеңіз, барлық қоспаны көресіз.

0
қосылды

Сіз пайдаланатын кітапхана API-і дұрыс емес құжатталған кезде, негізгі ерекшелікке ие болуыңыз керек және оны тек қана жолдан алып тастау арқылы хабардан ғана емес, тұтас алып тастауыңыз керек. Мысалы.

   try
   {
       //api call which throws exception.
   }
   catch(Exception ex)
   {
       //log ex.ToString();       
   }
0
қосылды

Сіз пайдаланатын кітапхана API-і дұрыс емес құжатталған кезде, негізгі ерекшелікке ие болуыңыз керек және оны тек қана жолдан алып тастау арқылы хабардан ғана емес, тұтас алып тастауыңыз керек. Мысалы.

   try
   {
       //api call which throws exception.
   }
   catch(Exception ex)
   {
       //log ex.ToString();       
   }
0
қосылды