“Object to int”运算符导致c#中的NullReferenceException

时间:2015-11-07 16:14:03

标签: c# .net nullreferenceexception

我将对象转换为整数时遇到问题。每次运行我的代码时都会得到NullReferenceException。有没有办法省略它?问题是关于“public static implicit operator int”。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Item
    {
        int number;

        public Item(int number1)
        {
            number = number1;
        }

        public static implicit operator int (Item item)
        // convert item to int
        {

            return item.number;
        }
        public static implicit operator Item(int number)
        // convert int to item
        {
            return new Item(number);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

我们需要查看您将此对象转换为整数的代码,但如果您的调用代码如下所示,则会发生这种情况:

Item item = null;
int i = item;

编译器会将其转换为与此大致相当的东西(假设这在语法上是有效的):

Item item = null;
int i = Item.operator_int( item );

由于item为空,这是传递给您的运算符的内容,当您尝试从number获取item字段(为空)时,它&# 39; ll抛出NullReferenceException。您需要检查运营商中item是否为空。

答案 1 :(得分:2)

您隐式转换为Item的{​​{1}}为int,例如:

null

中间一行将使用Item item = null; int a = item; //Will call the implicit operator with null Console.WriteLine(a); 调用隐式运算符,这将导致它查找null,其中item.number为空,并将抛出item,就好像你会写下以下内容:

NullReferenceException

您应该更改运算符以设置默认值,例如:

Item item = null;
int a = Item.operator_int(item);
Console.WriteLine(a);