在C#</dynamic>中对List <dynamic>使用NULL局部变量

时间:2012-09-04 02:34:38

标签: c# asp.net razor webmatrix

我可以找到(从任何地方)将SQL查询的结果导入局部变量的最佳解决方案是使用NULL List<dynamic>IEnumerable<dynamic>变量声明。

通过执行以下操作来创建变量:

@{
    IEnumerable<dynamic> myVariable = null;
}

然后,变量可以从数据库查询中获取值,如:

@{
    try
    {
        Database db = Database.Open("name"); // name of connectionString configured in web.config
        string myQuery = "EXEC dbo.Get_Results @Param1=@0, @Param2=@1";
        myVariable = db.Query(myQuery, @Param1, @Param2);
        db.Close();
        db.Dispose();
    }
    catch (Exception ex)
    {
        // Do something
    }

这使我可以做以下事情:

@if(myVariable != null)
{
    foreach (var row in myVariable)
    {
        // Do something
    }
}

这是完美的,但我仍然很好奇的是如何使用List<dynamic>来做同样的事情,作为使用IEnumerable<dynamic>我使用它的方式的替代方法。

我在List<dynamic>使用的IEnumerable<dynamic>等效解决方案是什么?

我知道我的问题本身很简单,但是当我尝试创建一个可以接收结果的类时,我花了很长时间才尝试解决无法隐式转换错误从db.Query(commandText)到预先声明的变量。所以我认为我应该提供更多细节,以防其他人试图找出相同或类似的东西。我在IEnumerable<dynamic>无关的主题中找到了我的解决方案,这让我看到了解决我试图解决的问题的简单方法。

1 个答案:

答案 0 :(得分:3)

Enumerable.Empty<string>()不为空。这是一个空字符串序列。请注意,例如,以下代码打印“false”:

var sequence = Enumerable.Empty<string>();
Console.WriteLine(sequence == null);

您可能想要创建一个新的(空)列表:

List<dynamic> x = new List<dynamic>();

或者,如果您确实需要list变量来保存空引用:

List<dynamic> x = null;