C#未分配的局部变量错误

Posted

技术标签:

【中文标题】C#未分配的局部变量错误【英文标题】:C# unassigned local variable error 【发布时间】:2010-11-17 04:09:02 【问题描述】:

我是 C# 新手。我正在尝试编译以下程序,但它最后会抛出一个错误:我知道我犯了一个愚蠢的错误。任何帮助将不胜感激:

static void Main(string[] args)

        IntPtr hCannedMessages = CannedMessagesInit();

        using (StreamReader sr = new StreamReader(CANNED_MESSAGE_FILE))
        
            String line, sub;
            all_integer_IDs[] myobjarray;// = new all_integer_IDs[10];
            for (int c = 0; c < 10; c++)
            
                myobjarray[c] = new all_integer_IDs();

            
                line = sr.ReadLine();
                Console.WriteLine(line);

                if (line.Length > 15)
                
                     sub = line.Remove(line.IndexOf(' ', 2));
                     Console.WriteLine("0 \n",sub);

    myobjarray[0].setvalues((int)sub[2], (int)sub[3], (int)sub[4], (int)sub[5]);

Console.WriteLine("0, 1, 2, 3", myobjarray[0].m_messageID, myobjarray[0].m_messagetype, myobjarray[0].m_classID, myobjarray[0] .m_categoryID);

               Console.Read();
            sr.Close();
        

    

并且该类在同一个项目的Class1.cs文件中,如下:

公共类 all_integer_IDs

    public all_integer_IDs() 
    

        setvalues(0, 0, 0, 0);

    

    ~all_integer_IDs()
    
    

    public void setvalues (int messageID, int messagetype, int classID, int categoryID)
    
        this.m_messageID = messageID;
        this.m_messagetype = messagetype;
        this.m_classID = classID;
        this.m_categoryID = categoryID;
    

     public int m_messageID;
     public int m_messagetype;
     public int m_classID;
     public int m_categoryID;


错误如下: 在第 55 行使用未分配的局部变量“myobjarray”,该变量在下面复制并粘贴: myobjarray[c] = new all_integer_IDs();

谢谢,维伦

【问题讨论】:

我改变了答案。希望对你有帮助 【参考方案1】:

您还没有为 myObjarray 分配空间。你需要分配它

用途:

all_integer_IDs[] myobjarray = new all_integer_IDs[10];
for (int c = 0; c < 10; c++)

    myobjarray[c] = new all_integer_IDs();

在第 55 行。

请使用PascalCase 作为类名(在您的情况下为 AllIntegerIDs)。其他开发者会为此感谢您

--编辑,我的错。更正了调用它的方式。请尝试以下方法

【讨论】:

感谢 samuel..它现在完美运行..在我目前正在处理这个 C# GUI 时尽快发布一些问题..希望你有时间回答它们.. 我会尽力帮助你。祝你好运!【参考方案2】:

看起来你需要在实例化数组 myobjarray 时声明它的大小和类型。实际上,看起来您已经有了该代码,您只需删除注释符号即可。

all_integer_IDs[] myobjarray = new all_integer_IDs[10]();

【讨论】:

谢谢,我删除了评论。现在它在 all_integer_IDs[] myobjarray = new all_integer_IDs[10]();我也尝试使用构造函数进行以下操作,但它也没有工作: public all_integer_IDs() m_messageID = 0; m_messagetype = 0; m_classID = 0; m_categoryID = 0; 你确定两个类中的命名空间是一样的吗? 其实应该是all_integer_IDs[] myobjarray = new all_integer_IDs[10];【参考方案3】:

你从来没有实例化你的数组,好像你注释掉了那部分。

如果您想要一个可变长度数组,请尝试使用列表。

【讨论】:

谢谢,我删除了评论。现在它在 all_integer_IDs[] myobjarray = new all_integer_IDs[10]();我也尝试使用构造函数进行以下操作,但它也没有工作: public all_integer_IDs() m_messageID = 0; m_messagetype = 0; m_classID = 0; m_categoryID = 0; 【参考方案4】:

你永远不会初始化 myobjarray。 你声明了 myobjarray,但你没有给它分配任何内存;如:您不初始化变量。 但是,您确实初始化了数组的元素(使用另一个数组),但您没有为 myobjarray 本身保留任何内存。 (初始化被注释掉了)

【讨论】:

谢谢,我删除了评论。现在它在 all_integer_IDs[] myobjarray = new all_integer_IDs[10]();我也尝试使用构造函数进行以下操作,但它也没有工作: public all_integer_IDs() m_messageID = 0; m_messagetype = 0; m_classID = 0; m_categoryID = 0;

以上是关于C#未分配的局部变量错误的主要内容,如果未能解决你的问题,请参考以下文章

“使用未分配的局部变量”错误的原因是啥? [复制]

统一使用未分配的局部变量(CS0165)光线投射[重复]

使用空分配修复“使用未分配的局部变量”。为啥?

为啥这个 (null || !TryParse) 条件会导致“使用未分配的局部变量”?

分配对局部变量的引用,如果局部变量超出范围,它会超出范围吗?

错误:“分配前引用了局部变量‘myData’”