我将对象转换为整数时遇到问题。每次运行我的代码时都会得到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);
}
}
}
答案 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);