var を null 許容型にする方法はありますか?
これは暗黙的に i を int として型付けしますが、null 許容の int が必要な場合はどうすればよいでしょうか?
var i = 0;
これをサポートしない理由:
var? i = 0;
var
代入の右側の式または定数によって暗黙的に型付けされます。 var
それ自体はタイプでNullable<var>
はないため、不可能です。
なぜそれをサポートするのですか?var i = (int?)0;
それがあなたの言いたいことなら、代わりに言うべきです。
(まあ、おそらくただ言うべきですint? i = 0
が、より複雑な型などの場合)
この問題は、null 許容型を扱います。
たとえば、null 許容の文字列を作成することはできません。その場合、var は文字列になる可能性があるため、null 許容の var を作成できなくなります。
私の答えは、これらの線に沿ったものです。「var」は暗黙的に入力されます。割り当ての右側に指定された値によって、それがどのタイプであるかがわかります。null許容型であると言うと、どのタイプになるかわかりません。割り当てられると、それが永遠に続くタイプであることを忘れないでください。
これを試してください-これはあなたが話していることですか?
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 も使用しません。複雑な型または int などの単純な型の場合は、"object" 型を使用します。
例:
//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;
}
VAR は、コンパイル時にコンパイラによって決定される暗黙の型です。最初の使用時に割り当てられます。IE で var I = 1 を設定すると、var は int になります。これが 1 という数字だからです。代わりに var I = SomeFunction() があり、一部の関数が null 許容の int を返す場合、I は int? として設定されます。これで、変数の型を制御したい場合に var を使用しないでください。
つまり、あなたの例のように var を使用するのは間違っているので、明示的に int に設定する必要がありますか? はじめから。