메서드가 끝날 때까지 올바른 항목이 모두 채워 졌는지 확인하기 위해 run () 함수를 테스트하고 있습니다. 데이터베이스에서 4 개의 필드, 2 개의 문자열 및 2 개의 IEnumerable (string)을 채 웁니다. 아이디어는 내가 데이터베이스에서 가져 오는 모든 사람들을 위해 그것들을 모두 인쇄하는 것입니다.
문자열 필드 만 인쇄하면 모든 것이 잘 작동합니다. 그러나 Enumerables도 추가하려고하면 아무것도 인쇄되지 않습니다. 또한 카운터를 인쇄하고 있으므로 프로그램이 여전히 실행 중이고 작동 중임을 알 수 있습니다. 콘솔은 공간이나 다른 이유로 인해 아무것도 인쇄하지 않기로 결정한 적이 있습니까?
이를 수행하는 코드는 다음과 같습니다.
int i = 0;
foreach (Contact contact in Contact.LoadWithPredicate(getAll))
{
-------other code to populate fields---------
i ++;
Console.WriteLine(i);
//Turn the Enumerables into strings for printing
string firstEnumAsString = String.Join(", ", firstEnumerable.ToArray());
string secondEnumAsString = String.Join(", ", secondEnumerable.ToArray());
Console.WriteLine("Email: " + firstString+ ", correspondance: " + secondString+ ", PAM addresses: " + firstEnumAsString+ ", famousPeople: " + secondEnumAsString);
}
따라서 출력으로 위의 코드를 실행할 때마다 다음과 같은 출력이 표시됩니다.
1
2
Email: [email protected], correspondance: John, PAM addresses: [email protected], famousPeople: foo, bar, foo
3
4
etc
문제는 전체 (~ 425 명) 중 2 명만 나타나고 나머지 줄은 숫자 일뿐입니다. 적어도 "이메일"과 ", 서신"이라는 문자열을 받아야하지 않습니까? 콘솔이 아무것도하지 않기로 결정한 것 같습니다. 그리고 Console.WriteLine ()을 호출하기 직전에 정수 i를 출력하기 때문에 코드가 도달해야한다는 것을 알고 있습니다.
반면에 두 개의 문자열 필드를 인쇄하도록 요청할 때마다 콘솔은 해당 정수 바로 뒤에 425 명의 모든 사용자에 대한 두 필드를 모두 표시합니다. 여기에서 무슨 일이 일어나고 있는지 아는 사람이 있습니까? TIA
귀하의 의견에 따르면 귀하 firstEnumerable
또는 secondEnumerable
개체가 null
. 당신이 이러한 개체를 얻는 방법을 게시하지 않았기 때문에, 나는에 대해 언급 할 수없는 이유는 그들이 null
또는 해결 방법을 할 수 있습니다.
null
항목 을 포함 하거나 완전히 비워도 괜찮지 만, 호출 할 때 자체가 될 수 null
없거나 던질 것입니다. 이는 "값은 null 일 수 없음"예외 메시지에 해당합니다.ArgumentNullException
.ToArray()
충돌이 발생하지 않는 이유는 try/catch
코드 샘플에 게시되지 않은 블록으로 반복 루프 내의 예외를 삼키고 (및 로깅?)하기 때문 입니다.
실제 코드는 다음과 같다고 생각합니다.
foreach (Contact contact in Contact.LoadWithPredicate(getAll))
{
try
{
...
object[] firstEnumerable = null;
object[] secondEnumerable = null;
//some logic gates here which under some circumstances do not
//assign a valid instance to firstEnumerable or secondEnumerable
...
Console.WriteLine(i); //this prints every time
//Turn the Enumerables into strings for printing
string firstEnumAsString = String.Join(", ", firstEnumerable.ToArray()); //exception here
string secondEnumAsString = String.Join(", ", secondEnumerable.ToArray()); //or exception here
Console.WriteLine("Email: " + firstString+ ", correspondance: " + secondString+ ", PAM addresses: " + firstEnumAsString+ ", famousPeople: " + secondEnumAsString);
...
}
catch
{
//maybe some logging? maybe not?
}
}
i
매번 값 을 인쇄합니다 . 그러나 생성을 시도 firstEnumAsString
하거나 secondEnumAsString
예외 가 발생하면 두 번째에 도달 하지Console.WriteLine("Email: " + ...);
않으므로 표시되는 출력이 생성됩니다. 그것이 Console.WriteLine
실패하는 것이 아니라 처음에 그것을 결코 부르지 않는 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다