2

私はnullHlist許容型ではないため、nullを返すことはできません。nullの代わりに他に何を返すことができますか?

HList findHListentry(string letter)
{
    if (string.IsNullOrWhiteSpace(letter))
    {
        HList result = listentry.Find(delegate(HList bk)
                       {
                           return bk.letter == letter;
                       });
        return result;
    }
    else
    {
        return ?;
    }
}
4

7 に答える 7

5

Nullable<HList>代わりに使用しますか?

HList? findHListentry(string letter)
{
    ///
    return null;
}
于 2012-08-09T20:19:47.357 に答える
4

null許容値タイプを処理するには、いくつかのアプローチがあります。

  • Nullable<HList>(の省略名は)を使用するHList?、または
  • 「空の」HListエントリを定義する。これは、Microsoftがエントリを定義した方法と同様です。Guid
  • メソッドをboolの代わりにHList返し、パラメータHListを介して、メソッドが行われる方法で返します。outDictionary.TryGetValue

特別な値の使用:

struct HList {
    public static HList Empty;
    ...
}

if (...) {
    return HList.Empty;
}

戻るbool

bool findHListentry(string letter, out HList res) {
    ...
}
于 2012-08-09T20:21:33.367 に答える
1

メソッドへの入力が本当に空の文字列であってはならない場合は、例外をスローできます。null

HList findHListentry(string letter)
{
    if (string.IsNullOrWhiteSpace(letter))
        throw new ArgumentNullException("letter");

    HList result = listentry.Find(
        delegate(HList bk)
        {
            return bk.letter == letter;
        }
    );

    return result;
}

(質問のタイトルとは反対のものを探しているように聞こえたので、条件付きロジックも逆にしたことに注意してください。)

入力を手動でチェックして例外をスローする代わりに、コードコントラクトを調べてメソッドの前提条件を確認することもできます。

于 2012-08-09T20:22:21.550 に答える
0

いくつかのオプションがあります。

構造体の場合HList

  1. それをクラスに変えてください。次に、nullを返すことができます。
  2. メソッドシグネチャをに変更しますHList? findHListentry(string letter)
于 2012-08-09T20:20:25.043 に答える
0

NullableofTを調べたいと思うかもしれません

于 2012-08-09T20:20:56.950 に答える
0

nullを返したくない場合は、「空の」値であることを示すために使用されるHListの静的インスタンスを作成できます。

EventArgs.Emptyに似ています

public static readonly HList EmptyHList = new Hlist() { /* initialise */ };

于 2012-08-09T20:23:52.817 に答える
0

1つの実装は、null許容型ではないEmptyインスタンスを提供し、nullの代わりにそれを返すことです。文字列を例にとると...Stringは.NETではnull許容型ですが、Emptyという読み取り専用フィールドが組み込まれているため、Stringを使用すると次のことができます。

if(mystring == null)
{
    //My String Is Null
}

または、これを行うことができます

if(mystring == String.Empty)
{
    //My String is Empty
}

これはおそらく最善のアプローチではありませんが、HListの空のインスタンスをクラス/構造体に追加することができます。例えば

HList findHListentry(string letter)
{
    if (string.IsNullOrWhiteSpace(letter))
    {
        HList result = listentry.Find(delegate(HList bk) { return bk.letter == letter; });
        return result;
    }
    else
    {
        return HList.Empty;
    }
}

public struct HList
{
    public const HList Empty;
}

これで、nullの代わりにこれを行うことができます

if(myHList == HList.Empty)
{
    //My HList is Empty
}
于 2012-08-09T20:38:27.777 に答える