2015-11-07 2 views
0

У меня проблема с преобразованием объекта в целое. Я получаю исключение NullReferenceException каждый раз, когда я запускаю свой код. Есть ли способ опустить его? Проблема заключается в «public static implicit operator int».Оператор «Object to int» вызывает NullReferenceException в C#

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

Код в порядке. Я проверил это. – AnjumSKhan

+0

Невозможно воспроизвести, отлично работать для меня. Вы не указали соответствующий код. –

ответ

2

Item где неявно приводится к 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); 

вы должны изменить оператора установите значение по умолчанию, например:

public static implicit operator int (Item item) 
{ 
    if (item == null) 
    { 
     return default(int); //0 
    } 
    return item.number; 
} 
2

Мы должны были бы видеть код, в котором вы преобразующий этот объект в целое число, но такого рода вещи могут произойти, если ваш код вызова выглядит следующим образом:

Item item = null; 
int i = item; 

Компилятор получится, что в чем-то примерно соответствует этому (при условии, что это синтаксический действительное):

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

с item имеет нулевое значение, это то, что получает передается в ваш оператор и ш Если вы попытаетесь получить поле number из item (которое равно null), оно вызовет исключение NullReferenceException. Вам нужно проверить, является ли item пустым в вашем операторе.

Смежные вопросы