2017-08-28 12 views
1

私は決定的な答えを見つけることができません。そして、MSのドキュメントは最大ではありませんので、ここで答えを見つけることができます。tryの例外のメッセージ属性は、空の文字列またはNULLをキャッチしますか?

は、この単純なコード考えてみましょう:

try 
    { 
     if (errMessage.Contains(EXCEPTIONCOMPARISONMESSAGE)) 
     { 
      //do stuff; 
     } 
    } 
    catch (Exception ex) 
    { 
     eventLog.WriteEntry("isAbleConvertToPDF: " + ex.Message, EventLogEntryType.Error); 
    } 

を私の質問はこれまでex.Message空の文字列またはNULLになりますか?私はだと思います。ではありませんが、明確な文書化された回答は見つかりません。

回答をバックアップするためのドキュメントも探してください。

+0

確かに: '新しい例外をスローする(" ");' – djv

+1

あなたはそれが違っていたらどうしますか? –

+0

@DStanleyもちろん私はそれを説明しますが、それは私が求めていたものではありません.... –

答えて

2

確かに可能です - カスタム例外(Exceptionから継承するもの)はnullまたは空の文字列を返す可能性があります。

コンストラクタもパラメータとしてメッセージを受け取ります。空の文字列でもかまいません。

メッセージが空でも空でもないことを示すためにインタフェース契約には何もありません。したがって、が空またはnullになる可能性があると想定する必要があります。

はここにあなたのコード例を埋め、例です:

try 
{ 
    if (errMessage.Contains(EXCEPTIONCOMPARISONMESSAGE)) 
    { 
     throw new MyEvilException(); 
    } 
} 
catch (Exception ex) 
{            V--------V this will be null 
    eventLog.WriteEntry("isAbleConvertToPDF: " + ex.Message, EventLogEntryType.Error); 
} 

private class MyEvilException : Exception 
{ 
    public override String Message 
    { 
     get 
     { 
      return null; 
     } 
    } 
} 
2

ExceptionMessageプロパティはvirtualとしてマークされている他の例外の基底クラスです。
つまり、Messageは空の文字列またはnullになる可能性があります。これは、派生クラスごとにオーバーライドできるためです。あなたは上から見ることができるように

public virtual String Message 
{ 
    get 
    { 
     if (_message == null) 
     { 
      if (_className==null) 
      { 
       _className = GetClassName(); 
      } 
      return Environment.GetResourceString("Exception_WasThrown", _className); 

     } 
     else 
     { 
      return _message; 
     } 
    } 
} 

よう Exceptionクラスの Message

しかし実際の実装はnullException基本クラスから返されることはありませんが、空の文字列が返されることを、探すときthrow new Exception(string.Empty);

+0

仮想...それは私が逃したものです。 –

+0

派生クラスがプロパティgetterをオーバーライドする場合、 'null'が返される可能性があります。 –

+1

@DStanley、私が答えの上に言ったように。ボトムセンテンスは基本クラス 'Exception'です – Fabio

関連する問題