2015-12-11 3 views
0

В текущем сценарии я заполняю список, но когда я перехожу на ItemsinList, многие из значений будут null, и, как вы можете видеть, я попытался контролировать нулевое значение строки, но это дает мне ошибку. Когда я заполняю источник данных в строке списка кода, он дает ошибку Object reference not set to an instance of an object. Я уже пробовал IsNullOrEmpty, Equals(string.Empty) и дал ему значение по умолчанию как null, но его все еще ломается. Мой вопрос: как я могу обрабатывать нулевые значения?Handle NullReferenceException при обработке списка элементов

var items = CommonList.ItemList(); 
items.Insert(0,new DataModel.SKU(){SKUID = 0,SKUName = "abc" }); 
var itemsinlist = from obj in items 
        select new { obj.SKUID, obj.SKUName,string.IsNullOrEmpty(obj.SKUCode), 
         obj.SalePrice, obj.PurchasePrice, obj.CostPrice, 
         // if is null the code breaks 
         obj.BaseUnit.UnitName, obj.SKUGroup.SKUGroupName, 
         obj.SKUBrand.SKUBrandName, obj.Unit_Weight }; 

var objlist = itemsinlist as IEnumerable<dynamic>; 
// can not add list if some value is null althought the db value can be null 
this.cmbSKU.ValueMember = "SKUID"; 
this.cmbSKU.DisplayMember = "SKUName"; 
this.cmbSKU.DataSource = itemsinlist.ToList(); 
+0

'IsNullOrEmpty' возвращает вам логическое значение, так что вы должны проверить это значение и решить, что вы хотите делать. Вы можете написать пустую строку, если значение равно null, например: '(obj.SKUCode == null)? String.Empty: obj.SKUCode' - если SKUCode имеет значение null, то он возвращает пустую строку, иначе SKUCode –

+0

не работает с такой же ошибкой, как и с пустой и пустой строкой. Http://prntscr.com/9cv0b0 –

+0

Ошибка: ошибка Недопустимый декларатор участника анонимного типа. Члены анонимного типа должны быть объявлены с присвоением членов, простым именем или доступом к члену –

ответ

0

Если у вас есть нулевые значения в свойствах, это не так уж плохо. Давайте рассмотрим следующий пример:

var items = from obj in "Hello".ToCharArray() 
      select new 
      { 
       First = (string)null 
      };  
var listTemp = items.ToList(); 

При вызове метода ToList это совершенно нормально.

Возможно, исключение исходит от элемента null в списке, который вы получаете из метода CommonList.ItemList(). Выражаю предыдущий пример и добавьте null элемент в список:

var listTemp = items.ToList(); 
listTemp.Add(null); 

var itemsProcessed = from item in listTemp 
        select new 
        { 
         item.First 
        };  
var list = itemsProcessed.ToList(); 

В этом случае NullReferenceException будет отброшен, потому что, когда мы создаем новый элемент и попытаться получить First собственности, мы не имеем действительный элемент.

Эта проблема может быть легко решена, если вы добавить where пункт в запросе:

var itemsProcessed = from item in listTemp 
        where item != null 
        select new 
        { 
         item.First 
        }; 
+0

Спасибо, что это было полезно –