2016-08-24 6 views
1

То, что я пытаюсь достичь, - это инициализировать переменную «фильтр» динамически, основываясь на том, что получает мой метод.Инициализировать динамически фильтр var

  • Инициализация его в 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(); 

Я искал, но никто кажется, есть моя проблема, или я не могу ее найти.

ответ

2

Var не является динамической переменной, это ключевое слово для type inference. Это очень разные понятия. Основная проблема заключается в том, что в вашем фрагменте кода компилятор не может определить, какой переменной вы хотите, чтобы ваш 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 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. 
+1

Спасибо! Я, хотя тип 'var' был похож на тип javascript. Он работал после изменения типа из var в динамический – Gino

0

С var это неявный тип, и вы можете инициализировать неявную переменную типа в null, так как он может быть как тип значения и ссылочный тип; и тип значения не может быть присвоен нулевому значению (если иное не указано явно явно).

Таким образом, вместо того, чтобы говорить var filter=null; вы должны явно указать тип

BsonDocument filter = null; 
+0

Не принимался, потому что, если бы я установил свой фильтр в 'BsonDocument', тогда он меня тут же меняет. Filter = builder.Eq (" Категории.Sub.id ", id);' потому что он возвращает другой тип. – Gino

Смежные вопросы