2011-09-28 6 views
0

어떤 이유로이 코드 비트에 3 진 if 문을 추가하면 NullPointerException이 throw됩니다. 나는 왜 왜 ... 어떤 아이디어가 확실하지 않습니까? 이것은 jqGrid에 대한 메소드이며 Json 데이터를 리턴합니다.문이 작동하지 않는 경우

var gridModel = from entity in vendorList.AsQueryable() 
      select new 
      { 
       VendorId = "<a href='/Admin/DetailsPlan/" + entity.VendorId + "'><img src='/Images/next_icon_sm.png' class='icon' alt='View Vendor' /></a>", 
       VendorNm = entity.VendorNm, 
       Phone = (entity.Phone.Length < 5) ? String.Format("{0:(###) ###-####}", Convert.ToInt64(entity.Phone)) : entity.Phone, 
       City = entity.City, 
       State = entity.LkState.StateAbbr 
      }; 

해당 위치에 3 진 if 문을 사용할 수 있습니까?

+0

"단항"if 문이란 무엇입니까? –

+1

@Peter : OP가 분명히 문제가없는 * i ++; * 예입니다. 우리의 훌륭한 의사가 찾는 단어는 Ternary라고 생각합니다. http://en.wikipedia.org/wiki/Ternary_operation 수정. – NotMe

+1

'? :'는 * 조건부 연산자라고 불립니다. * (실제로는 3 차원이 아닌 단항 적이됩니다.) http://msdn.microsoft.com/en-us/library/ty67wk28.aspx –

답변

1

하나의 질문은 entity.Phone null입니까? 그렇다면 그것이 원인 일 것입니다.

사이드 노트 : 나는 말을, 그 문제는 "entity.Phone.Length"부분입니다

UPDATE .. 전화 번호를 저장하는 이상한 방법입니다. Phone이 null이면 길이 속성에 액세스 할 수 없으므로 오류가 발생합니다. 따라서 널 테스트를 추가해야합니다. 다음과 같이하십시오 :

Phone = ((entity.Phone != null) && (entity.Phone.Length < 5)) ? String.Format("{0:(###) ###-####}", Convert.ToInt64(entity.Phone)) : entity.Phone 

그런 식으로, null 인 경우 null 값을 방출하는 것입니다.

+0

이며 null입니다. 그러나 String.Format (엔티티 ....)이 있거나 전화를 표시하는 경우에는 오류가 발생하지 않지만 두 가지 조합을 사용하면 표시되지 않습니다. – Cody

+0

Ahhhhhhhhhh .... 그건 말이 될 것입니다. Derp. 저를 바꿔 드리겠습니다 ... – Cody

+0

완벽. 그게 다야, 고마워. – Cody

2
var gridModel = from entity in vendorList.AsQueryable() 
    let unformattedPhone = entity.Phone??string.Empty 
    select new 
    { 
     VendorId = "<a href='/Admin/DetailsPlan/" + entity.VendorId + "'><img src='/Images/next_icon_sm.png' class='icon' alt='View Vendor' /></a>", 
     VendorNm = entity.VendorNm, 
     Phone = (unformattedPhone.Length < 5) ? String.Format("{0:(###) ###-####}", Convert.ToInt64(unformattedPhone)) : unformattedPhone, 
     City = entity.City, 
     State = entity.LkState.StateAbbr 
    }; 

이렇게하면 문제를 해결할 수 있습니다.

+0

세미콜론이 오타입니까? – Cody

+0

예 oops : P 수정했습니다 –

+0

그것은'entity.phone.Length <5 '- 어떤 경우 엔 entity.phone이 null 인 것으로 끝났습니다. 그러나, 당신의 솔루션은 흥미롭게 보입니다.'let unformattedPhone = entity.Phone ?? string.empty' double? 방법? – Cody

관련 문제