최근 추가 코드 분석 규칙을 사용하도록 설정했습니다. 놀랍게도 나는 항상 최고의 연습으로 생각하고 있었던 곳에서 위반을 보았습니다. 나는이 같은 두 using 문을 걸었습니다 두 개의 중첩 일회용있는 경우 :중첩 사용 문 및 Microsoft 코드 분석
using (StringReader strReader = new StringReader(xmlString))
using (XmlReader xmlReader = XmlReader.Create(strReader))
{
result.ReadXml(xmlReader);
}
이것은 또한 높은 평가 Q &에 상태를 다음 내가 할 Nested using statements in C#
위반에 해당 :
Warning 18 CA2202 : Microsoft.Usage : Object 'strReader' can be disposed more
than once in method '????'. To avoid generating a System.ObjectDisposedException
you should not call Dispose more than one time on an object.: Lines: ??
을
내가 한 것은 직관적 인 시도와 오류였습니다. 바깥 쪽 스트림이 닫혀도 내부 코드를 처리 할 것이라고 생각 했으므로 다음과 같이 코드를 빠르게 수정했습니다.
using (XmlReader xmlReader = XmlReader.Create(new StringReader(xmlString)))
{
result.ReadXml(xmlReader);
}
Hura! 경고가 사라졌습니다. 하지만, 타다! 새로운 하나가 발생했습니다 : CA2202과 정확히 놀랍게도 (모든 좋은 프로그래머처럼) 아주 마지막 단계로
{
StringReader strReader = null;
try
{
strReader = new StringReader(xmlString);
using (XmlReader xmlReader = XmlReader.Create(strReader))
{
strReader = null;
result.ReadXml(xmlReader);
}
}
finally
{
if (strReader != null) strReader.Dispose();
}
}
나는 보았다 도움말 페이지로 :
Warning 18 CA2000 : Microsoft.Reliability : In method '????????', object
'new StringReader(xmlString)' is not disposed along all exception paths. Call
System.IDisposable.Dispose on object 'new StringReader(xmlString)' before all
references to it are out of scope.
가 그럼 난 매우 추한 해결책을 발견 마지막 UGLY 솔루션이 문제를 해결하기 위해 제안 되었습니까?
마침내 {}을 (를) 사용하면 마침내 코드가 혼잡 해집니다. 나를 위해 더 많이 읽을 수있는 중첩 된 있습니다.
질문 : 작업을 수행하는 더 좋은 방법이 있습니까? 직관적으로 이해할 수있는 솔루션을 찾고 있습니다. 이 마지막 스 니펫을 볼 모든 사람은 일어나는 일에 대한 골동품이 될 것입니다.
미리 답변 해 주셔서 감사합니다.
P.S. 아마도 MetaStackoverflow에 속해있을 것입니다. 사실, 그 질문은 이미 물어 보았을 것입니다.(XmlReader를 XmlReader를 XmlReader.Create = (strReader))를 사용하여 I 시도하는 방법도 다음 코드 '사용 (StringReader를 strReader = StringReader를 새로운 (xmlString을)) 바이 –
{ strReader = NULL; result.ReadXml (xmlReader); } 오류가 발생합니다. '변수 사용'이기 때문에 'strReader'에 할당 할 수 없습니다. –