“对象到 int”运算符导致 C# 中的 NullReferenceException
" Object to int" operator causes NullReferenceException in c#
我在将对象转换为整数时遇到问题。每次我 运行 我的代码时,我都会得到 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);
}
}
}
我们需要查看将此对象转换为整数的代码,但如果您的调用代码如下所示,则可能会发生这种情况:
Item item = null;
int i = item;
编译器会将其转换为大致等同于此的内容(前提是这在语法上是有效的):
Item item = null;
int i = Item.operator_int( item );
由于 item
为空,这就是传递给您的运算符的内容,当您尝试从 item
(为空)获取 number
字段时,它会抛出空引用异常。您需要检查运算符中的 item
是否为 null。
隐式转换为 int
的 Item
是 null
,例如:
Item item = null;
int a = item; //Will call the implicit operator with null
Console.WriteLine(a);
中间行将调用带有 null
的隐式运算符,这将导致它查找 item.number
,其中 item
为 null,并会抛出一个 NullReferenceException
,就好像您将编写以下内容:
Item item = null;
int a = Item.operator_int(item);
Console.WriteLine(a);
您应该更改您的运算符以设置默认值,例如:
public static implicit operator int (Item item)
{
if (item == null)
{
return default(int); //0
}
return item.number;
}
我在将对象转换为整数时遇到问题。每次我 运行 我的代码时,我都会得到 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);
}
}
}
我们需要查看将此对象转换为整数的代码,但如果您的调用代码如下所示,则可能会发生这种情况:
Item item = null;
int i = item;
编译器会将其转换为大致等同于此的内容(前提是这在语法上是有效的):
Item item = null;
int i = Item.operator_int( item );
由于 item
为空,这就是传递给您的运算符的内容,当您尝试从 item
(为空)获取 number
字段时,它会抛出空引用异常。您需要检查运算符中的 item
是否为 null。
隐式转换为 int
的 Item
是 null
,例如:
Item item = null;
int a = item; //Will call the implicit operator with null
Console.WriteLine(a);
中间行将调用带有 null
的隐式运算符,这将导致它查找 item.number
,其中 item
为 null,并会抛出一个 NullReferenceException
,就好像您将编写以下内容:
Item item = null;
int a = Item.operator_int(item);
Console.WriteLine(a);
您应该更改您的运算符以设置默认值,例如:
public static implicit operator int (Item item)
{
if (item == null)
{
return default(int); //0
}
return item.number;
}