의 목록을 열거 할 때 나는 다음 각 하나를 반복하고 일부 약간의 로직을 수행 예외는 사용자 정의 유형
List<MyType> a = JsonConvert.DeserializeObject<List<MyType>>(jsonstringa);
List<MyType> b = JsonConvert.DeserializeObject<List<MyType>>(jsonstringb);
JSON의 직렬화를 통해 채워지는 두 개의 목록이 발생합니다. 이 콜렉션들이 비어있는 것은 전적으로 그 이유입니다.
foreach (MyType myA in a)
{
//DO STUFF HERE
}
foreach (MyType myB in b)
{
//DO STUFF HERE
}
컬렉션에 항목이있는 경우에도 문제가 없습니다. 그러나 목록 B에 항목이 없을 때 "foreach"줄에 "Throw Exception"개체의 인스턴스로 설정되지 않은 개체 참조가 나타납니다.
if (a.Count > 0)
{
foreach (MyType myA in a)
{
//DO STUFF HERE
}
}
if (b.Count > 0)
{
foreach (MyType myB in b)
{
//DO STUFF HERE
}
}
: 이것은, 그러나, 나는 한 단계 더 그것을 가져다가 단지뿐만 아니라 안전을 위해 위의 코드를 변경는 다음과 같아야 이이 목록 A.
발생하지 않습니다 "A"목록을 통한 반복은 빈 콜렉션이든 엘리먼트를 가지고 있든간에 괜찮습니다. 컬렉션에 요소가있는 경우 "B"목록을 반복하여 다시 처리하지만 이번에는 (myB.Count) > 0
행을 제외하고 동일한 예외가 다시 발생합니다. 디버깅을 통해 두 컬렉션의 Count 속성은 컬렉션이 비었을 때 '0'을 나타냅니다 (예상했던대로).
namespace MyApp.Models
{
public class MyType
{
public int ID { get; set; }
public string Code { get; set; }
public int ParentID { get; set; }
[ScriptIgnore(ApplyToOverrides = true)]
[JsonIgnore]
public virtual Parent Parent { get; set; }
public MyType()
{
ID = 0;
Code = null;
ParentID = 0;
}
}
}
나는 손실에 조금 해요 :
사용자 지정 "합니다 MyType"클래스는 다음과 같은 선언이 아닌 모든 가상 변수 기본 생성자가 있습니다. 나도 여기에 실패하는 다른 사용자 지정 형식을 가지고 있지만 사실 하나의 동일한 유형의 페어링과 예외를 던지는 것은 모두 의심스럽고 다른 사람이이 동작에 대한 통찰력을 줄 수 있도록 도와줍니다.
은 사실 myB입니다. – JMarsch
당신은 "디버깅을 통해 두 컬렉션의 Count 속성이 '0'으로 표시됩니다. 'myB.Count'를 watch 식으로 정의하고 0을 가졌다는 것을 의미합니까?하지만 실행을 계속하면'if (myB.Count> 0)'가 에러를 던집니다. 위의 코드에서 – DadyFuji
은 a.Aut를 의미하지 않습니다 .Count 대신 myA.Count가 목록이거나 myA 목록입니까? –