4

私は実際にガイドラインを探しています.C#-DLL内のパブリックメソッドで複数の例外を文書化する方法です。

例:

/// <summary>
/// This method does something
/// </summary>
/// <param name="p_Parameter1">First parameter</param>
/// <param name="p_Parameter2">Second parameter</param>
/// <param name="p_Number">A number</param>
/// <exception cref="ArgumentNullException">
/// Thrown if p_Parameter1 is null</exception>
/// <exception cref="ArgumentNullException">
/// Thrown if p_Parameter2 is null</exception>
/// <exception cref="ArgumentNullException">
/// Thrown if any element of p_Parameter2 is null</exception>
/// <exception cref="ArgumentOutOfRangeException">
/// Thrown if p_Number is below or equal 0</exception>
/// <returns>A object</returns>
public static object DoSomething(
    object p_Parameter1, IList<object> p_Parameter2, 
    object p_Parameter3, int p_Number)
{
    if(p_Parameter1 == null)
        throw new ArgumentNullException(
            paramName:"p_Parameter1", 
            message:"Parameter is needed");
    if (p_Parameter2 == null)
        throw new ArgumentNullException(
            paramName: "p_Parameter2", 
            message: "Parameter is needed");

    for (int i = 0; i < p_Parameter2.Count; i++)
    {
        if(p_Parameter2[i] == null)
            throw new ArgumentNullException(
                paramName: String.Format("p_Parameter2[{0}]", i),
                message: "All elements have to be initialized");
    }

    if(p_Number < 0)
        throw new ArgumentOutOfRangeException(
            paramName: "p_Number", 
            message: "Parameter should be bigger then zero");

    var returnValue = new object();

    // do something where p_Parameter3 == null is allowed

    return returnValue;
}

これらの例外を文書化するのは正しい方法ですか? ケースごとに 1 つの例外タグを追加する必要がありますか、それとも null 値が許可されていないすべてのパラメーターに対して 1 つだけ追加する必要がありますか?

/// <exception cref="ArgumentNullException">
/// Thrown if p_Parameter1, p_Parameter2
/// or any element of p_Parameter2 are null</exception>
4

2 に答える 2

5

私は間違いなくタイプごとに例外をグループ化しますThrown if p_Parameter1, p_Parameter2 or any element of p_Parameter2 are null

参考として、MSDN のドキュメントを参照してください。例:_

ArgumentNullException   |   Either path, contents, or encoding is null.
于 2012-10-24T12:59:16.297 に答える
2

この場合、MSDN はエミュレートするのに適した情報源であり、そこでいくつかの 関数 を調査すると、1 つのブロックを使用し、その内部のさまざまなパラメーターを列挙する傾向があるようです。exception

このようにすることで、重複を含むリストよりも個別の例外のリストを確認する方が理解が容易になるため、コードの消費者はどの例外をキャッチする可能性があるかを簡単に知ることができます。

于 2012-10-24T12:59:25.903 に答える