1

私を悩ませているのはそれです。私はそれを理解することはできません。私がしなければならないことは、リスト「List」にある「nazwisko」という名前の男を検索することです。そのような男がいない場合は、null を返す必要があります。言語はC#です。

どんな助けでも感謝します。

Pracownik Search(string nazwisko)
{
    foreach (Pracownik pracownik in List)
    {
       if (List.Contains(pracownik))
          return pracownik;
       else
          return null;
    }
}
4

6 に答える 6

6

List要素が含まれていない場合は、何も返されません。

Pracownik Search(string nazwisko)
{
    foreach (Pracownik pracownik in List)
    {
       if (List.Contains(pracownik))
          return pracownik;
       else
          return null;
    }

    // Adding this will correct
    return null;
}

そうは言っても、事実上常に最初の要素を返すため、foreach は必要ありません。これは同じことを行います:

Pracownik Search(string nazwisko)
{
      return List.FirstOrDefault();
}

私がしなければならないことは、リスト「List」にある「nazwisko」という名前の男を検索することです。

最初に一致した要素を検索文字列に返すつもりなら、次のことをお勧めします。

Pracownik Search(string nazwisko)
{
      return List.FirstOrDefault(item => item.Name == nazwisko);
}
于 2013-05-30T17:26:09.577 に答える
2

すべてのコード パスが値を返さないことが原因です。

   Pracownik Search(string nazwisko)
    {
       if (List == null) return null; //return if your list is null.

        foreach (Pracownik pracownik in List)
        {
           if (pracownik.someProp.Equals(nazwisko))
              return pracownik;
        }
        return null; //or something here
    }

この場合、コンパイラはコンパイル時に List が null または空になるかどうかを知りません。List が null/empty の場合、値を返す for ループ内のコード パスに入ることはないため、関数は返されません。

Linq を使用している場合は、次のように書き換えることができます。

   Pracownik Search(string nazwisko)
   {
      if(List == null) return null;

      return List.FirstOrDefault(x=> x.someProp.Equals(nazwisko));
   }
于 2013-05-30T17:25:47.273 に答える
1

List が null の場合、 foreach ステートメントがそれ以上評価されない可能性があるという事実を考慮する必要があります。したがって:

 Pracownik Search(string nazwisko)
    {
        foreach (Pracownik pracownik in List)
        {
           if (List.Contains(pracownik))
              return pracownik;
           else
              return null;
        }
    // This is where the other path is.  What should it return if List is null?
     return null;
    }

ただし、関数の構文を確認します。それがあなたの意図したとおりに機能するかどうかはわかりません。

編集:

Pracownik Search(string nazwisko)
    {
        foreach (Pracownik pracownik in List)
        {
           if (pracownik.Property?.Equals(naxwisko))
              return pracownik;
        }
    // This is where the other path is.  What should it return if List is null?
     return null;
    }

これはより良い構文かもしれません-比較したいプロパティやオブジェクトが何であるかがわかりません.

于 2013-05-30T17:28:39.007 に答える
1
Pracownik Search(string nazwisko)
{
    Pracownik retVal = null;
    foreach (Pracownik pracownik in List)
    {
       if (List.Contains(pracownik))
       {
          retVal = pracownik;
          break;
       }
    }
    return retVal;
}
于 2013-05-30T17:26:35.557 に答える
0

リストが空の場合、戻り値はありません。そのため、foreach ループの終了後に null を返す必要があります。エラーが発生した場合は、関数の戻り値を受け取る変数を nullable に定義してみてください。

于 2013-05-30T17:28:26.800 に答える
0

foreach ループで else を使用する必要はありません。そうしないと、リストに最初の pracownik が存在しない場合、すぐに null が返されます。また、使用されていないのに、なぜ文字列パラメーターを渡すのですか?

Pracownik Search(string nazwisko)
{
    foreach (Pracownik pracownik in List)
    {
       if (List.Contains(pracownik))
          return pracownik;
    }
    return null;
}
于 2013-05-30T17:32:05.983 に答える