2011-05-24 80 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,诠释