2012-03-12 7 views
3

私はASPサイト上のここでのasp.net MVCのためのチュートリアルで探していますが:ASP.NET MVC 3 - このブール値はコントローラでどのように機能していますか?

// 
     // GET: /Student/Delete/5 

     public ActionResult Delete(int id, bool? saveChangesError) 
     { 
      if (saveChangesError.GetValueOrDefault()) 
      { 
       ViewBag.ErrorMessage = "Unable to save changes. Try again, and if the problem persists contact your system administrator."; 
      } 
      return View(db.Students.Find(id)); 
     } 

私がいることを見ている:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-basic-crud-functionality-with-the-entity-framework-in-asp-net-mvc-application

私は混乱しているコントローラのメソッドがありますboolは 'saveChangesError'という名前で作成されますが、ifステートメントには 'GetValueOrDefault()'というブール値で呼び出されるメソッドがあります

このシナリオではどういうことが起こっていますか?私はGetValueOrDefault()がすべてのブール型のメソッドでなければならないと仮定していますか? .NETのドキュメントでこれを調べたところ、次の定義が見つかりました。

HasValueプロパティがtrueの場合はValueプロパティの値。 それ以外の場合は、現在のNullable(Of T)オブジェクトの既定値です。 デフォルト値の型は、現在の Nullable(Of T)オブジェクトの型引数であり、既定値の値はバイナリ0のみの です。

この定義を.net mvcアプリケーションで行われているものと接続する際に問題があります。

ありがとうございました。

+2

いいえ、ヌルブルブールの場合のみ – dotjoe

答えて

5

GetValueOrDefault()は、bool,it's part of Nullable<T>の一部ではありません。ここで重要なのは、boolが関数ヘッダで宣言されている構文は次のとおりです。

public ActionResult Delete(int id, bool? saveChangesError) 

疑問符が、これは本当にboolではありませんが、Nullable<bool>であることを示しているC#の言語構造です。値のタイプ(boolは1)はnullにできません。しかし、ときには、の場合は役に立ちます。そのため、その目的に役立つ構造体が存在します(Nullable<T>)。

GetValueOrDefault()は、値が指定されていない場合boolの値またはboolwhich is false)のデフォルト値が返され、その構造体のメソッドです。

+0

ありがとう、たくさんの良い回答がありますが、これは私にとって最も役立ちます。 – PhillipKregg

2

documentationは、GetValueOrDefault() "現在のNullable(Of T)オブジェクトの値、またはオブジェクトのデフォルト値を取得します。"と記載しています。この場合のNullable(Of T)saveChangesErrorです。

データベースの変更を保存する際にエラーが発生した場合(この場合、学生を削除する)、saveChangesError.GetValueOrDefault()がtrueを返し、if文がその内容を処理します。

+1

デフォルト値は、OPがわからない場合は、初期化せずに何かを宣言したときの値です。したがって、boolのデフォルト値はfalseです。intsは0、オブジェクトnullなどです。 – bhamlin

1

null不可能なオブジェクトはすべて、GetValueOrDefaultというオーバーロードされたメソッドを実装しています。 null可能なオブジェクトに値が割り当てられている場合はその値を、デフォルト値を返します。

1
bool? saveChangesError 

は、null可のブール型データ型です。 1)真 2) 偽3)ヌル

GetValueOrDefault()のが設定されていないとき、真または偽の値が設定されている場合、またはnullのいずれかを返します。これは3つの可能な値を持っています。このシナリオでは、値がtrueの場合

if (saveChangesError.GetValueOrDefault()) 

エラーが発生しました。これがうまくいきたいです

+0

GetValueOrDefault()はboolにnullを返しません。 – bhamlin

+0

@bhamlin申し訳ありませんが、私は熱心だったので、boolをnullに設定することができます。デフォルトはfalseです。これはGetValueOrDefault()メソッドで行います。 – jacqijvv

2

パラメータの定義を見てくださいbool? saveChangesError '?' bool型がnullを許可していることを意味します。それはTrueです。 | Null

これは3つの値を持つため、単にtrueをチェックすることはできません。 false。ヌルもチェックする必要があります。

GetValueOrDefault()は、メソッドが説明しているものとまったく同じnull可能な型に追加されます。パラメータに値がある場合は、その値を返します。デフォルト値が返されない場合は、この場合はfalseです。

ので、if文アウトを破るために、

メソッドを使用して
if (saveChangesError.HasValue && saveChangesError == true) 
{ 
    //... 
} 

のようなものは、ちょうどそれがより簡潔になりだろう。

+0

これはまた役に立ちます、ありがとう。 – PhillipKregg

関連する問題