2013-07-10 57 views
0

我明白,誠信是一個非空值,但存在這樣的情況MVC在這裏我們使用C#中的Int與Null相同嗎?

public ActionResult Myfunction(int modelattr) 
{ 
    if (modelattr != 0) // how is null handled as 0? 
    { 
     // do some code 
    } 
} 

怎麼是空的0處理?

+2

空值不能用int類型表示。 0是int類型的默認值。有int嗎?或者可以爲空的可以處理null – user2509738

+4

null!= 0,0!= null。 null == null。 0 == 0 –

+0

你在這裏問什麼? 'modelattr'是一個int。你爲什麼認爲它是空的? –

回答

1

上面的答案已經給出了關於int不能爲空以及如何創建可爲空的int的原因的充足信息。但是,要解決你正在尋找到(不具有傳遞到動作的ID)的問題,您需要具備以下條件:

在你的路由配置(注意選配ID參數):

routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

然後調整自己的控制器動作的簽名相匹配的一個空值測試沿着以下:

public ActionResult Myfunction(int? modelattr) 
{ 
    if (modelattr.HasValue()) //this will test if the nullable int has a value or is null 
    { 
     // do some code 
    } 
} 

最後,您可能想反轉的if語句,這取決於你想要做什麼減少執行代碼塊的嵌套如果參數爲空。例如:

public ActionResult Myfunction(int? modelattr) 
{ 
    if (!modelattr.HasValue()) //this will test if the nullable int has a value or is null 
    { 
     //throw an exception or return a route to another page 
    } 
    //now do your processing, no need to have to stay inside of the if statement. 
} 
8

int不能是null。期。許多系統使用0作爲「默認」值,並在這種情況下應用特殊邏輯,但不能爲空。

一個int?(快捷方式Nullable<int>)CAN BU null但你的例子不使用它。

+2

可能值得補充的是'int?'可以爲空。 'int?'語法是'Nullable '的快捷方式。所以不是你不能有一個'可空'的情況。只是'int'本身不可能是'null'。 –

+0

並在您的示例中,modelattr是一個int。所以你永遠不能通過int?到你的功能。 –

+0

現在來了一個重複的答案急 - - –

0

int永遠不會爲null,因爲它是不可爲空的值類型。如果您想要再嘗試分配一個空值到int如下

 int i = null; 

它會給你錯誤的
無法將null轉換到「詮釋」,因爲它是一個非空的值類型

3

結構不能爲空,並且int is a structintSystem.Int32的別名)。

如果您想知道如果您沒有爲該值分配任何內容(例如您有一個int作爲您從未設置的類的屬性),那麼「默認」值將是什麼,您可以獲得該值的default(int)

如果你確實需要一個空值的結構,你可以使用Nullable包裝。通常這可以縮短到int?

3

那麼你實際上問的是,由於這條路線:

 routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

那麼,如何是,如果沒有指定控制器通過爲0的id值。

有(至少)兩種可能性:

  1. 有一些代碼,檢查值缺失的ID和建築材料0您控制器的默認方法能做到這一點,例如。
  2. 還有另一條路徑提供默認值。

無論如何,沒有什麼是將空值轉換爲0.有些代碼在沒有指定id時提供默認值。

相關問題