8

var を null 許容型にする方法はありますか?

これは暗黙的に i を int として型付けしますが、null 許容の int が必要な場合はどうすればよいでしょうか?

var i = 0;

これをサポートしない理由:

var? i = 0;

4

7 に答える 7

6

var代入の右側の式または定数によって暗黙的に型付けされます。 varそれ自体はタイプでNullable<var>はないため、不可能です。

于 2009-02-11T16:00:31.897 に答える
4

なぜそれをサポートするのですか?var i = (int?)0;それがあなたの言いたいことなら、代わりに言うべきです。

(まあ、おそらくただ言うべきですint? i = 0が、より複雑な型などの場合)

于 2009-02-11T15:58:09.157 に答える
2

この問題は、null 許容型を扱います。

たとえば、null 許容の文字列を作成することはできません。その場合、var は文字列になる可能性があるため、null 許容の var を作成できなくなります。

于 2009-02-11T16:02:39.533 に答える
0

私の答えは、これらの線に沿ったものです。「var」は暗黙的に入力されます。割り当ての右側に指定された値によって、それがどのタイプであるかがわかります。null許容型であると言うと、どのタイプになるかわかりません。割り当てられると、それが永遠に続くタイプであることを忘れないでください。

于 2009-02-11T16:09:52.450 に答える
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;
        }
    }
于 2009-02-11T16:24:33.973 に答える
0

この場合、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;
}
于 2012-08-24T15:19:42.240 に答える
0

VAR は、コンパイル時にコンパイラによって決定される暗黙の型です。最初の使用時に割り当てられます。IE で var I = 1 を設定すると、var は int になります。これが 1 という数字だからです。代わりに var I = SomeFunction() があり、一部の関数が null 許容の int を返す場合、I は int? として設定されます。これで、変数の型を制御したい場合に var を使用しないでください。

つまり、あなたの例のように var を使用するのは間違っているので、明示的に int に設定する必要がありますか? はじめから。

  • ダロル
于 2010-11-01T20:57:07.177 に答える