2014-11-22 3 views
0

따라서 내 다음 코드를CA1806 DoNotIgnoreMethodResults가 잘못 제기 되었습니까?

[Conditional("DEBUG")] 
internal static void WriteGLResult(string methodName, object result, 
    params object[] args) 
{ 
    string message = String.Format(CultureInfo.InvariantCulture, "{0}({1}) = {2}", 
     methodName, String.Join(", ", args), result); 
    Write(LogType.Information, Category.GLResult, 2, message); 
} 

내가 분명히 변수 messageString.Format() 결과를 할당하고있다. 나중에 그 인스턴스를 Write 메서드에 전달합니다. 그러나 CA1806가 발생합니다 :

방법은

결과 무시 'Log.WriteGLResult (문자열, 객체를 PARAMS [] 오브젝트)'[전화 '및 String.format (IFormatProvider를, 문자열, PARAMS 개체를하지 마십시오 ]) '하지만 메서드가 반환하는 새 문자열 인스턴스는 사용하지 않습니다. 다른 방법에 대한 인수로 인스턴스를 전달 변수에 인스턴스를 할당하거나, 나는 또한 문자열을 호출 Write 방법에서

사용하고 unnecessary.` 경우 호출을 제거, format이 이름 , 다음과 같이 사용됩니다 :

[Conditional("DEBUG")] 
private static void Write(LogType logType, Category category, int stackTraceFrameSkips, 
    string format, params object[] args) 
{ 
    // ... 
    string message = String.Format(CultureInfo.InvariantCulture, format, args); 
    // ... 
} 

이 경고를 수정하는 방법을 모르겠습니다. 그리고 나는 CA가 이것을 잘못 제기하는 것을 의심합니다.

도와 주시겠습니까?

+1

어떻게 '쓰기'가 정의되어 있습니까? 내 첫 번째 추측은 ['ConditionalAttribute'] (http://msdn.microsoft.com/en-us/library/system.diagnostics.conditionalattribute%28v=vs.110%29.aspx)가 적용된 것입니다. CA에 'message'가 사용되었는지 여부를 결정하기 전에 호출이 제거됩니다. 당신이 설명하는 문제가있는 최소한의 완전한 프로그램을 제공하려고 할 수 있습니까? – hvd

+0

@hvd : 예, 그렇습니다. 모든 쓰기 호출 (이 호출 된 호출과 호출 된 호출)은'[조건부 ("DEBUG")] 속성으로 꾸며진다. 내가 이것들없이 지으면, 나는 경고를 얻지 못한다. 내 질문에 발췌 문장에 추가했습니다. 대답으로 추가하면 받아 들일 것입니다. =) –

답변

1

코멘트에서 확장 : Write 이후

DEBUG 심볼이 정의되지 않은 경우 완전히 제거됩니다 Write에 대한 호출을 의미

[Conditional("DEBUG")] 
private static void Write(LogType logType, Category category, int stackTraceFrameSkips, 
    string format, params object[] args) 

으로 정의된다. 코드 분석은 나중에 실행되며 그때까지는 message이 사용되지 않는다는 것을 (정확하게) 판단 할 수 있습니다.

둘 디버그 나 릴리스 모드에서 경고하지 뭔가를

, 당신은 직접 메소드 인자로 String.Format로 통화를 이동하려는 : 이것은 String.Format 만 때 호출되어 있는지 확인해야

Write(LogType.Information, Category.GLResult, 2, 
    String.Format(CultureInfo.InvariantCulture, "{0}({1}) = {2}", 
    methodName, String.Join(", ", args), result)); 

Write이 호출됩니다.

+0

훌륭한 솔루션, 완벽하게 작동합니다. –