0

gridview_new はフォームクラスです

private checkNulls[] CheckNulls()
    {
        checkNulls Cntrl;
        checkNulls[] cntrlsToupdate = new checkNulls[15];
        using (gridview_new IterateThroughCntrls = new gridview_new())
        {              

            for (int i = 5; i < 18; i++)
            {
                var getCntrl = 
                    IterateThroughCntrls.Controls.Cast<Control>().Where(x => x.TabIndex ==  i).SingleOrDefault();

                if (!(getCntrl.Text == ""))
                {
                    Cntrl = (checkNulls)(i);
                    cntrlsToupdate[i - 5] = Cntrl;
                }
            }
        }

        return cntrlsToupdate;
    }

タブインデックス 5 にコントロールがあるにもかかわらず、Get Control が null 値を取得しています。

4

1 に答える 1

2

最初に、参照型 ( など)...OrDefaultの場合は、特定の型の既定値を返します。したがって、次のことを簡単に確認できます。Controlnull

if(getCntrl != null)
{
    // safe....
}

コントロールのテキストが必要な場合、および一致するコントロールが見つからない""場合のデフォルトとして、 +を使用します。WhereSelectDefaultIfEmpty

string getCntrlText = IterateThroughCntrls.Controls.Cast<Control>()
    .Where(x => x.TabIndex ==  i)
    .Select(ctrl => ctrl.Text)
    .DefaultIfEmpty("")
    .Single();

Singleデフォルト値を提供してから使用したことに注意してください。

複数の項目が述語に一致する場合Single...、 は ( ではなく) 例外をスローすることに注意してください。First...通常、複数の要素を見つけることが不可能なキー プロパティで使用されます。したがって、ここではFirst(またはFirstOrDefault) の方が適切なようです。

于 2013-10-30T10:06:10.400 に答える