2011-05-24 105 views
5

我已經看到了如何初始化var to null.這並不在我的處境有所幫助。我有初始化VAR爲null

string nuller = null; 
var firstModel = nuller; 
if(contextSelectResult.Count() > 0) 
    firstModel = contextSelectResult.First(); 

我得到錯誤

無法隱式轉換類型 'SomeNamespace.Model.tableName' 到 '串'。

我試圖避免嘗試/捕捉InvalidOperationFirst()當沒有第一個存在,因爲它的昂貴。那麼,我怎樣才能超越範圍問題呢?

+0

試試這個:firstModel = contextSelectResult.First()的ToString(。 ) – 2011-05-24 14:24:29

+0

如果跳過計數,只是使用FirstOrDefault(),你應該得到一個空反正。 – canon 2011-05-24 14:25:10

+1

你想firstModel是一個字符串還是一個更復雜的數據對象?正如你所定義的,它是一個字符串(和錯誤消息告訴你) – 2011-05-24 14:36:12

回答

6

改爲使用FirstOrDefault()。的FirstOrDefault整點是,如果它的存在是爲了返回序列的第一個元素,或以其他方式的元件類型的默認值(即空的所有引用類型)。

注意的是,在你想檢查任何要素的存在,使用Any()有時比Count() > 0更高效的其他情況下 - 這取決於具體的上下文,但IMO它表達你是什麼樣的一個更簡單的方法無論如何,尋找。

7

可以使用FirstOrDefault()代替。

firstModel = contextSelectResult.FirstOrDefault(); 

if(firstModel != null) 
{ 
    ... 
} 
2

嘗試FirstOrDefault代替。如果沒有項目,它默認返回null

1

如果沒有首先這將是引用類型空:

var firstModel = contextSelectResult.FirstOrDefault(); 
20

你可以試試這個:

var firstModel=(dynamic) null; 
+0

這只是爲我工作。謝謝胡安:) – 2012-09-27 13:33:28

+1

我看不到在這裏使用動態的任何好處。由於動態行爲,您甚至會有開銷。 – 2013-06-25 07:56:36

+0

或'dynamic firstModel = null;' – nawfal 2014-03-06 02:35:38

0

您可以使用通用的這種情況也

public static dynamic GetTheListOfDevicesDependOnDB(int projectID) 
{ 
    List<Devices_Settings> ListDevices_Settings = new List<Devices_Settings>(); 
    var db = new First_DataContext(); 
    var devices = (dynamic) null; 
    switch (projectID) 
    { 
     case (int)enmProjectType.First: 
      db = new First_DataContext(); 
      devices = db.Device_Fisrt.ToList(); 
      break; 
     case (int)enmProjectType.Second: 
      var db1 = new Second_DataContext(); 
      devices = db1.Device_Second.ToList(); 
      break; 

     default: 
      break; 
    } 

    foreach (var item in devices) 
    { 
     //TODO 
    } 

    return ListDevices_Settings; 

}

0

請嘗試使用此選項:

var var_name = (dynamic)null; 

var var_name = (Type*)null; 

類型*:例如: - >字符串,VAR,詮釋