动态初始化var过滤器

本文关键字:过滤器 var 初始化 动态 | 更新日期: 2023-09-27 18:03:45

我想要实现的是根据我的方法得到的动态初始化"过滤器"变量。

  • 初始化为null会抛出错误。
  • 为空抛出错误。
  • 将其设置为泛型类型会抛出错误
  • 将其设置为新的BsonDocument也会抛出错误

这是我的代码:

var filter=null;
if (id != 0)
    if (subID != 0)
        //Get Specific Categories
        filter = builder.Eq("Categories.Sub.id", id) & builder.Eq("Categories.Sub.Custom.id", subID);
    else
        //Get SubCategories
        filter = builder.Eq("Categories.Sub.id", id);
else
    //Get Generic Categories
    filter = new BsonDocument();

我一直在搜索,但似乎没有人有我的问题,或者我找不到。

动态初始化var过滤器

Var不是动态变量,它是用于类型推断的关键字。这是非常不同的概念。关键问题是,在你的代码片段中,编译器不能弄清楚你想要你的var是什么样的变量。

var myNumber = 3; // myNumber is inferred by the compiler to be of type int.
int myNumber = 3; // this line is considered by the computer to be identical to the one above.

var变量的推断类型不会改变。

var myVariable = 3;
myVariable = "Hello"; // throws an error because myVariable is of type int

动态变量的类型可以改变。

dynamic myVariable = 3;
myVariable = "Hello"; // does not throw an error.

编译器必须能够在创建var变量时确定对象的类型;

var myVariable = null; // null can be anything, the compiler can not figure out what kind of variable you want.
var myVariable = (BsonDocument)null; // by setting the variable to a null instance of a specific type the compiler can figure out what to set var to.

对于var,它是隐式类型,您可以将隐式类型变量初始化为null,因为它可以是值类型和引用类型;并且值类型不能赋值给null(除非它被显式地设置为空)。

因此,你应该明确地指定类型

,而不是说var filter=null;
BsonDocument filter = null;