是否有var可以为可空的类型?
这隐式地将i键入为int,但是如果我想要一个可以为空的int?
var i = 0;
为什么不支持这个:
var? i = 0;
答案 0 :(得分:5)
var
由赋值右侧的表达式或常量隐式输入。 var
本身并不是一种类型,因此Nullable<var>
是不可能的。
答案 1 :(得分:3)
为什么支持它?如果这就是你的意思,你应该说var i = (int?)0;
。
(好吧,你应该只说int? i = 0
,但对于更复杂的类型等等。)
答案 2 :(得分:2)
问题涉及可空类型。
例如,您无法创建可为空的字符串,这反过来会阻止您创建可空的var,因为var可能是一个字符串。
答案 3 :(得分:0)
我的回答是这样的。 “var”是隐式输入的。它通过赋值右侧提供的值计算出它的类型。如果你告诉它它可以为空,它就不知道它是什么类型。请记住,一旦它被分配,那就是永远的类型。
答案 4 :(得分:0)
试试这个 - 这就是你所说的吗?
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;
}
}
答案 5 :(得分:0)
VAR是编译时编译器确定的隐式类型。它在首次使用时分配。 IE设置var I = 1时,var是一个int,因为这就是数字1。如果您改为使用var I = SomeFunction(),其中某些函数返回一个可空的int,而不是我将设置为int?。现在,在你想要控制变量类型的情况下,不应该使用var。
所以底线,根据你的示例使用var是错误的,应该显式设置为int?从一开始。
答案 6 :(得分:0)
在这种情况下,我甚至不会使用var。如果它是一个复杂的类型或一个简单的类型,如int,我会使用type&#34; object&#34;。
示例:
//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;
}