在switch c#中,对象引用没有设置为对象的实例

本文关键字:设置 对象 实例 switch 对象引用 | 更新日期: 2023-09-27 18:13:32

我在开关指令错误,但我不知道为什么。看看Main类:

            try {  
            var result = string.Join(" ",File.ReadAllBytes(args[0]).Select(x => x.ToString("X")));
            Console.WriteLine(result);
            ASM asm = new ASM(); 
            if(result != null) asm.EXEC(result); //Error here?
        }
        catch(Exception ex) {
            Console.WriteLine(ex.Message);
        }

和ASM类。我认为EXEC方法和切换指令错误:

public class ASM
{
    public void EXEC(string ex) 
    {
        if (ex == null)
            Console.WriteLine("ASM opcode is null!");
        string[] a = ex.Split(' ');
        int i = 0;
        while (i<a.Length)
        {
            switch (a [i])
            {
                case "AF":  //hlt
                    Environment.FailFast("hlt");
                    break;
                case "AB":  //Write
                    i++;
                    string memorySegment = a[i];
                    i++;
                    int memoryValue = Convert.ToInt32(a[i]);
                    if(memorySegment == "F0") Memory.Write("0xC00",memoryValue);
                    else if (memorySegment == "F1") Memory.Write("0x100",memoryValue);
                    else if (memorySegment == "F2") Memory.Write("0x200",memoryValue);
                    else if (memorySegment == "F3") Memory.Write("0xA00",memoryValue);
                    else if (memorySegment == "F4") Memory.Write("0xB00",memoryValue);
                    break;
            }
            i++;
        }
    }

在控制台我看到AB F1 19 AF Object reference not set to an instance of an object如何消除这个错误?代码成功写入十六进制文件的代码,但参数为ASM。EXEC方法(结果)不为空,但方法不可读。谢谢,对不起,我的英语不好。

在switch c#中,对象引用没有设置为对象的实例

我不能确定这是异常的原因,但是我应该指出这样一个事实,即在case "AB"中,您增加i的值而不检查新值是否仍然在数组a的边界内。

如果你击中AB的情况下,你的数组的最后一个字节,你有一个异常(虽然它应该是indexoutorange异常)。