Подтвердить что ты не робот

Как инициализировать var?

Можно ли инициализировать var с нулевым или некоторым пустым значением?

4b9b3361

Ответ 1

С# - строгий/строго типизированный язык . var был введен для привязки типа времени компиляции для анонимных типов, но вы можете использовать var для примитивных и пользовательских типов, которые уже известны во время разработки. Во время выполнения нет ничего подобного var, он заменяется фактическим типом, который является либо ссылочным типом, либо типом значения.

Когда вы говорите,

var x = null; 

компилятор не может решить это, потому что нет типа, связанного с нулем. Вы можете сделать это так.

string y = null;
var x = y;

Это будет работать, потому что теперь x может знать свой тип во время компиляции, которое в этом случае является строкой.

Ответ 2

Почему это не возможно?

var theNameOfTheVar = (TheType)null;

например:

var name = (string)null;

Просто как это.

Ответ 3

Хорошо, как утверждают другие, проблема двусмысленности в типе - проблема. Таким образом, ответ отрицательный, С# не позволяет этому случиться, потому что это строго типизированный язык, и он касается только известных типов времени компиляции. Компилятор мог быть спроектирован так, чтобы выводить его как тип object, но дизайнеры предпочли избежать дополнительной сложности (в С# null нет типа).

Один из вариантов -

var foo = new { }; //anonymous type

Снова обратите внимание, что вы инициализируете известный тип времени компиляции, а в конце - не null, а анонимный объект. Это всего на несколько строк короче new object(). Вы можете переназначить анонимный тип на foo в этом случае, что может или не желательно.

Инициализация до null с неизвестным типом не может быть и речи.

Если вы не используете dynamic.

dynamic foo = null;
//or
var foo = (dynamic)null; //overkill

Конечно, это бесполезно, если вы не хотите переназначать значения переменной foo. Вы также потеряете поддержку Intellisense в Visual Studio.

Наконец, как ответили другие, у вас может быть определенный тип, объявленный методом casting;

var foo = (T)null;

Итак, ваши варианты:

//initializes to non-null; I like it; cant be reassigned a value of any type
var foo = new { }; 

//initializes to non-null; can be reassigned a value of any type
var foo = new object();

//initializes to null; dangerous and finds least use; can be reassigned a value of any type
dynamic foo = null;
var foo = (dynamic)null;

//initializes to null; more conventional; can be reassigned a value of any type
object foo = null;

//initializes to null; cannot be reassigned a value of any type
var foo = (T)null;

Ответ 4

Неа. var должен быть инициализирован типом, он не может быть нулевым.

Ответ 5

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

Итак, вам не разрешено делать это.

Когда вы говорите "какое-то пустое значение"... если вы имеете в виду:

var s = string.Empty;
//
var s = "";

Тогда да, вы можете это сделать, но не null.

Ответ 6

Ну, я думаю, вы можете назначить его новому объекту. Что-то вроде:

var v = new object();

Ответ 7

Вот как ввести значение в переменную var

var _myVal = (dynamic)null; 

Ответ 8

A var не может быть установлен на null, так как он должен быть статически типизирован.

var foo = null;
// compiler goes: "Huh, what that type of foo?"

Однако вы можете использовать эту конструкцию для решения этой проблемы:

var foo = (string)null;
// compiler goes: "Ah, it a string. Nice."

Я не знаю точно, но из того, что я слышал, вы также можете использовать dynamic вместо var. Это не требует статического ввода.

dynamic foo = null;
foo = "hi";

Кроме того, поскольку мне было непонятно вопрос, если вы имели в виду ключевое слово var или переменные в целом: только ссылки (для классов) и типы с нулевым значением могут быть установлены в нуль. Например, вы можете сделать это:

string s = null; // reference
SomeClass c = null; // reference
int? i = null; // nullable

Но вы не можете этого сделать:

int i = null; // integers cannot contain null

Ответ 9

вы не можете присвоить значение null типу var.

Если вы присвоите null, компилятор не сможет найти переменную, которую вы хотите в var place.

выдает ошибку: Cannot assign <null> to an implicitly-typed local variable

вы можете попробовать следующее:

var dummy =(string)null;

Здесь компилятор может найти нужный тип, поэтому не проблема

Вы можете назначить несколько пустых значений.

var dummy = string.Empty;

или

var dummy = 0;

Ответ 10

вы не можете инициализировать var с нулем, var нужно инициализировать как тип, иначе он не может быть выведен, если вы считаете, что вам нужно это сделать, возможно, вы можете опубликовать код, вероятно, есть другой способ сделать что вы пытаетесь.

Ответ 11

Спасибо, Mr.Snake, нашел этот полезный инструмент для другого трюка, который я искал:) (недостаточно комментариев для комментариев)

Сокращенное присвоение типов с нулевым значением. Вот так:

var someDate = !Convert.IsDBNull(dataRow["SomeDate"])
                    ? Convert.ToDateTime(dataRow["SomeDate"])
                    : (DateTime?) null;