【问题标题】:Unassigned variable error [duplicate]未分配的变量错误[重复]
【发布时间】:2023-04-08 12:28:01
【问题描述】:
using System;

namespace ConsoleApplication
{
    class Program
    {
        public delegate void mydel(int z);

        static void Main(string[] args)
        {
            Program p = new Program();

            Random r = new Random();
            int k = r.Next(99);

            mydel f;

            if (k > 50)
            {
                f = new mydel(p.high);
            }

            if (k < 50)
            {
                f = new mydel(p.low);
            }

            //f(k) is underlined and Use of unassigned local variable 'f'     
            f(k);
        }

        //methods
        public void high(int m)
        {
            Console.WriteLine("{0}>50", m);
        }

        public void low(int n)
        {
            Console.WriteLine("{0}<50", n);
        }
    }
}

我希望 f(k) 能够工作,因为我给了委托参数。为什么我会收到此错误? (在 f(k) 部分使用未分配的局部变量 'f')

【问题讨论】:

  • 添加其他。 if(k&gt;50){...} else if(k&lt;50){...} else {...} 以防k==50
  • 如果k == 50 怎么办?那么f将不会被分配。

标签: c# unassigned-variable


【解决方案1】:

只需添加null

mydel f = null

或者把 else 放在条件之间。因为,当k == 50f 没有初始化时:

    mydel f;

    if (k > 50)
    {
        f = new mydel(p.high);
    }
    else
    {
        f = new mydel(p.low);
    }

【讨论】:

  • 编译器是否在编译时检查我是否覆盖了 if else 块中的所有可能性?
  • @Lyrk 检查变量是否已初始化。它等于mydel f = k &gt; 50 ? new mydel(p.high) : new mydel(p.low);,因此分配了变量
【解决方案2】:

如果k &gt; 50 那么 f 是某个代表,如果k &lt; 50 - 也是。如果k == 50 怎么办?在这种情况下,f 没有被指定(即使它不为空) - 所以你不能使用它。

快速修复:

mydel f = null;

但是当k == 50时你会得到NullReferenceException; 您还可以在k == 50 时添加额外的if

【讨论】:

    猜你喜欢
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多