3
public SPListItemCollection GetACollection()
{
    try
    {
        //Method to get an item collection from somewhere
        if(itemCol != null)
            return itemCol;
        else
            return null;
    }
    catch(Exception ex)
    {
        LogException(ex);
        return null;
    }
}

このメソッドは、例外がキャッチされるかどうかに関係なく、null (空のリストではない) を返す必要があります。上記は機能しますが、それを行うより良い方法はありますか?

4

11 に答える 11

4
if(itemCol != null)
    return itemCol;
else
    return null;

に簡略化します

return itemCol;

それならitemCol == null、戻るとitemColすでにが返されますnull。その振る舞いを特別な場合にする理由はありません。

空のコレクションをに置き換える場合はnull、次のようなものを使用する必要があります。

if((itemCol != null) && itemCol.Any())
    return itemCol;
else
    return null;

ちょっとしたデザインアドバイス:

  • 例外を飲み込むことはお勧めしません。処理方法を知っているいくつかの特定の例外のみをキャッチする必要があります
  • 空のコレクションは、多くの場合、よりも操作に適していnullます。
于 2012-06-01T14:35:57.463 に答える
4

私は最初にこれを行うのはひどいことだと言わなければなりません、例外を飲み込むことはひどいです!こんなことしないで!それはあなたを悩ませ、デバッグを非常に難しくします、さらに悪いことに、例外のためにnullを返します-nullは通常、飲み込まれている例外よりもデバッグがはるかに難しいNullReferenceExceptionをスローすることになります(ログに記録されている場合でも)、しかし、あなたが尋ねたので:

public SPListItemCollection GetACollection()
{
    SPListItemCollection itemCol = null;
    try
    {
        //Method to get an item collection from somewhere
    }
    catch(Exception ex)
    {
        LogException(ex);
    }
    return itemCol;
}
于 2012-06-01T14:36:32.563 に答える
3

複数の出口点を持つメソッドが好きではありませんでした。catchでitemColnullに設定し、 try / catchreturnitemColの外にあり
ます。

try
{
     // whatever
     if(itemCol.Count == 0) itemCol = null;
}
catch(Exception x)
{
     LogException(x);
     itemCol = null;
}
return itemCol;
于 2012-06-01T14:40:02.563 に答える
2

あなたは、現在の実装が機能していると述べました。アイテム コレクションを取得するために使用されるメソッドは、1 つ以上のアイテムを含むコレクションを返すか、null を返すか、例外をスローすると想定しています。これが本当なら、これは1つの選択肢になります。

public SPListItemCollection GetACollection()
{
   SPListItemCollection itemCol = null;
   try
   {
      itemCol = //Method to get an item collection from somewhere
   }
   catch(Exception e)
   {
      LogException(e);
   }
   return itemCol;
}
于 2012-06-01T15:19:50.430 に答える
1

コレクションが空の天気をチェックするには、このAny()メソッドが便利です。ほとんどの場合、リストはありませんが、一般的なIEnumerablesがあります。の重複を取り除きたいだけの場合はreturn null;、簡単に行うことができます。

public SPListItemCollection GetACollection()
{
    try
    {
        //Method to get an item collection from somewhere
        if(itemCol.Any())
            return itemCol;
    }
    catch(Exception ex)
    {
        LogException(ex);
    }

    return null;
}

追加することもできます

    finally
    {
        // Stuff that always needs to be done.
    }

の閉じ括弧の直後catch

于 2012-06-01T14:38:28.570 に答える
0

それはすでに良いです、imo、私も最後を削除します、elseこのように:

public SPListItemCollection GetACollection()
{
    try
    {
        //Method to get an item collection from somewhere
        if(itemCol != null)
            return itemCol;

        //Some if/else code here presumably... 

        //NO ELSE HERE...
        return null;
    }
    catch(Exception ex)
    {
        LogException(ex);
        return null;
    }
}
于 2012-06-01T14:35:39.443 に答える
0

if-elseオブジェクトがnullの場合はすでにnullを返すため、ブロックは必要ありません。

public SPListItemCollection GetACollection()
{
    try
    {
        //Method to get an item collection from somewhere
        return itemCol;
    }
    catch(Exception ex)
    {
        LogException(ex);
        return null;
    }
}
于 2012-06-01T14:37:18.093 に答える
0

これはどう?あなたのスペックが言うなら:

nullを返す必要があります(空のリストではありません)

コレクションがnullではなく空の場合、現在の実装は空のコレクションを返します。あなたがそれを処理する方法に依存しない限り。

これはそれの世話をします...

public SPListItemCollection GetACollection()
{
    try
    {
        //Method to get an item collection from somewhere
        if(itemCol != null && itemCol.Count == 0)
            return itemCol;

        return itemCol;
    }
    catch(Exception ex)
    {
        LogException(ex);
    }

    return null;
}
于 2012-06-01T14:39:19.397 に答える
0

私はそうします:

public SPListItemCollection GetACollection()
{
    try
    {
        //Method to get an item collection from somewhere
        return itemCol != null && itemCol.Count == 0 ? null : itemCol;
    }
    catch(Exception ex)
    {
        LogException(ex);
        return null;
    }
}
于 2012-06-01T14:40:19.147 に答える
0

あなたのコードは問題ないようです。好みに合う場合は、最後に null リターンを配置できます。

public SPListItemCollection GetACollection()
{
    try
    {
        //Method to get an item collection from somewhere
        if(itemCol != null)
            return itemCol;
    }
    catch(Exception ex)
    {
        LogException(ex);
    }
    return null;
}
于 2012-06-01T14:43:38.097 に答える