0

私はすべてのメソッドが関連しているので、私が持っているクラスライブラリの各静的メソッドに使用する適切な例外を探しています。静的クラスにInvalidOperationExceptionを使用できますか?

public static void EnterText(string element, string value, PropertyType elementType) 
    { 
     if (PropertiesCollection.Driver == null) 
     { 
      throw new InvalidOperationException(); 
     } 
     if (elementType == PropertyType.Id) 
     { 
      PropertiesCollection.Driver.FindElement(By.Id(element)).SendKeys(value); 
     } 
     else if (elementType == PropertyType.Name) 
     { 
      PropertiesCollection.Driver.FindElement(By.Name(element)).SendKeys(value); 
     } 
     else //if elementType does not make sense an argument exception is thrown 
     { 
      throw new ArgumentException(); 
     } 
    } 

問題は、PropertiesCollection.Driverが初期化されていない場合、メソッドが役に立たないということです。したがって、メソッドが呼び出されたときにnullの場合、例外をスローしたいと思います。私が探しているものに最も近いのは、InvalidOperationExceptionです。しかし、MSDNは、 "オブジェクトの現在の状態に対してメソッド呼び出しが無効な場合にスローされる例外"と述べています。それは静的クラスであるためオブジェクトがないため、これは不適切な例外タイプですか?いいえの場合は、代わりにどの例外をスローする必要がありますか?

さらに、組織の側面では、ドライバがnullであるかどうかをチェックするコードスニペットは、各メソッドの先頭にあるのか、あまりにも重複しているのでしょうか?私が考えることのできる代替案は、チェックの各段階で呼び出され、必要に応じて例外をスローするヘルパーメソッドです。

+0

https://msdn.microsoft.com/en-us/library/system.invalidoperationexception(v=vs.110).aspx – MethodMan

+0

@Zach、それを汗ばませないでください。 InvalidOperationExceptionは問題ありません。 2番目の質問が広すぎる、契約を使用したい、制限付き機能などを提供するプロキシクラスを作成したい場合があります。 –

+0

ありがとう!うん、私は第二の質問に同意する。私はそれがちょうど私が欲しいものに依存すると思う。 – Zach

答えて

1

私には不一致かもしれませんが、技術的にインスタンスがないと、InvalidOperationExceptionが間違った例外であると言っている人もいます。これは私にとってこの例外の完全に許容される使用のようです。

私はあなたがInvalidOperationExceptionがをスローする必要がありますが、それは正直にすべてのことは価値があるようではありません、プラスそれができれば、あなたが、私の意見では、この条件をテストして決定する実際減少明瞭性をヘルパー関数を作成することができたとしコードのチェックはそれほど多くのコードではなく、私がコードを読んでいれば、別の方法を見つけ出して調べるよりも、何が起こっているのかを知ることを好むでしょう。

+0

助けてくれてありがとう!うん、私はそれがすべてのメソッドの前にifステートメントを持つことは理にかなっていると思う。コードが複数の場所で使用されている場合は、ヘルパー関数を作成する必要があるという考えが常にありましたが、必ずしもそうとは限りません。 – Zach

+0

実際にヘルパー関数に入れるためには、コードの多くの行を保存することはありませんし、それを残しておくと、呼び出しの絶対前提条件であることがわかります。 – EJoshuaS

関連する問題