Есть ли в любом случае, чтобы var имел тип NULL?nullable var с использованием неявной типизации в C#?
Это неявно описывает i как int, но что, если я хочу иметь значение nullable int?
var i = 0;
Почему бы не поддержать это:
var? i = 0;
Есть ли в любом случае, чтобы var имел тип NULL?nullable var с использованием неявной типизации в C#?
Это неявно описывает i как int, но что, если я хочу иметь значение nullable int?
var i = 0;
Почему бы не поддержать это:
var? i = 0;
Почему поддержать его? Если это то, что вы имеете в виду, вместо этого вы должны сказать var i = (int?)0;
.
(Ну, вы, вероятно, следует просто сказать int? i = 0
, но и для более сложных типов, и т.д.)
var
набирается неявно выражением или константа в правой части задания. var
сам по себе не является типом, поэтому Nullable<var>
невозможно.
Проблема связана с типами с нулевым значением.
Например, вы не можете создать нулевую строку, которая, в свою очередь, не позволит вам создавать nullable var, так как var может быть строкой.
Мой ответ подобен этим линиям. «var» вводится неявно. Он определяет, какой тип это значение, указанное в правой части задания. Если вы скажете, что он обнулен, он не знает, какой тип быть. Помните, как только он назначен, это тот тип, который будет навсегда.
Попробуйте это - это то, о чем вы говорите?
static void Main(string[] args)
{
for (int i=0; i < 10; i++)
{
var j = testMethod();
if (j == null)
{
System.Diagnostics.Debug.WriteLine("j is null");
}
else
{
System.Diagnostics.Debug.WriteLine(j.GetType().ToString());
}
}
}
static int? testMethod()
{
int rem;
Math.DivRem(Convert.ToInt32(DateTime.Now.Millisecond), 2, out rem);
if (rem > 0)
{
return rem;
}
else
{
return null;
}
}
VAR - неявный тип, определенный компилятором во время компиляции. Он присваивается при первом использовании. IE, когда вы устанавливаете var I = 1, var является int, потому что это то, что число 1. Если у вас вместо этого есть var I = SomeFunction(), где некоторая функция возвращает значение nullable int, то я буду установлен как int ?. Теперь с этим указанным var не следует использовать в случае, когда вы хотите контролировать тип переменной.
Итак, нижняя строка в соответствии с вашим примером с использованием var неверна и должна быть явно установлена в int? от начала.
Я бы даже не использовать вар в этом случае. Если это сложный тип или простой, например int, я бы использовал тип «object».
Пример: "как я могу это сделать в C#"
//Define all global class variables
List<int> m_lInts = New List<int>();
List<string> m_lStrs = New List<string>();
public static object FindMyObject(string sSearchCritera)
{
//Initialize the variable
object result = null;
if (result == null)
{
//Search the ints list
foreach(int i in m_lInts)
{
if (i.ToString() == sSearchCritera)
{
//Give it a value
result = (int)i;
}
}
}
if (result == null)
{
//Search the ints list
foreach(string s in m_lStrs)
{
if (s == sSearchCritera)
{
//Give it a value
result = (string)s;
}
}
}
//Return the results
return result;
}
Ваш вопрос или «Почему C# не разрешает это?» Первый, на который мы можем ответить, но второй принадлежит Microsoft (мы можем только догадываться). –