문제

이것은 나를 많이 괴롭 히고 나는 Intellisense와 결합 할 때 바보 같은 버그를 씁니다 (vs 2008 pro) :

class Foo
{
    public Foo(bool isAction)
    {
        this.IsAction = IsAction;
    }

    public bool IsAction { get; private set; }
}

당신은 그것을 잡았습니까? 나는 확실히 Isaction이 변하지 않아서 버그를 일으킬 때까지 확실히하지 않았다.

지적 세대는 어떻게 든 개조된다 "isA<tab>"to"to "isaction"은 저를위한 "isaction" Foo.IsAction ~이다 언제나 생성자 입력에 관계없이 False. 그냥 훌륭합니다.

나는 특히 "암시 적을 싫어한다고 말해야한다. this"(공식 이름이 있는지 모르겠다) 그리고 나는 그것을 끄고 싶지 않으므로 결코 그것을 가정하지 않는다. 이것을 할 방법이 있습니까? 이것은 동일한 클래스의 정적 메소드를 호출하는데도 적용됩니다.

또는 어떤 이름 지정 규칙 이이 작은 문제를 피하는가? 속성은 "ISACTION"을 유지해야하므로 생성자 매개 변수 이름에 대한 협약이어야합니다. 이상하게도 정확히 일치하는 철자로 이름을 지정하면 this.IsAction = IsAction; 올바르게 작동합니다.

문제는 대소 문자에 민감한 언어가 아니라 암시 적입니다 this. 이제 나는 그것에 대해 생각하기 때문에 이것은 C#보다 2008 Pro 질문에 더 가깝습니다. 나는 이미 쓰여진 코드로 살 수 있습니다 this 그러나 나는 그것 없이는 새로운 코드를 쓰고 싶지 않습니다.


Noldorin의 대답은 나를 생각하게했습니다.

이제 나는 그것에 대해 생각하기 때문에 이것은 C#보다 2008 년 VS 2008 질문에 더 가깝습니다. 나는 이미 쓰여진 코드로 살 수 있습니다 this (비록 내가 거기에 멍청이가 있다면 그것을 바꾸지 만) 새 코드를 쓰고 싶지는 않습니다. 이는 지능적인 말을 중단하라고 지시하는 것을 의미합니다. Intellisense에게 그것을 쓰러 뜨리라고 말할 수 있습니까?

도움이 되었습니까?

해결책

이것은 일반적인 문제입니다. Microsoft에는 일부가 있습니다 매개 변수 이름에 대한 권장 사항 그러나 그들은 당신의 경우에 큰 도움이되지 않습니다.

다른 응답자가 언급했듯이 C# 언어 범위 해상도 동작을 "비활성화"할 수는 없습니다. 최선의 접근 방식은 이름 지정 규칙입니다. 다른 사람들은 "헝가리 인"표기법을 언급했습니다. 어떤 사람들은 원래 의도에 대한 혼란 표기법의.

저의 개인적인 접근 방식은 문자 'P'를 공개 기능의 매개 변수 이름에 대한 접두사로 사용하는 것이 었습니다. 눈에 띄지 않고 간단하며 쉽게 식별 할 수 있으며 다음과 같은 도구로 쉽게 시행 할 수 있습니다. resharper.

당신이 선택한 특정 명명 컨벤션은 선호도와 스타일의 문제입니다. 그러나 선택한 연습에서 일관성이 있다는 이점이 있습니다.

제안 된 명명 규칙을 사용하면 생성자를 다음에 작성합니다.

class Foo
{
    public Foo(bool pIsAction)
    {
        this.IsAction = pIsAction;
    }

    public bool IsAction { get; private set; }
}

다른 팁

방금 Visual Studio 2008에서 코드를 사용해 보았습니다. 구축 된 정적 분석을 켜면 다음 오류가 발생합니다.

경고 3 CA1801 : Microsoft.usage : 'foo.foo (bool)의'Isaction '은 사용되지 않습니다. 매개 변수를 제거하거나 메소드 본문에서 사용하십시오.

내 제안은 이것을 켜는 것입니다. 이와 같은 오류를 일찍 찾을 수 있습니다. 프로젝트의 상황에 맞는 메뉴에서 속성을 선택한 다음 코드 분석 탭을 선택하고 "빌드에서 코드 분석 활성화"를 선택하십시오.

당신은 항상 헝가리 표기법으로 돌아갈 수 있습니다. 추악함을 다룰 수 있다면 문제가 해결 될 것입니다. 이것은 추천이 아니라 제안입니다.

또는 나는 정적 코드 분석이 이것을 잡고 그것에 대해 경고 할 것이라고 확신합니다. fxcop을 사용해보십시오.

편집하다

나는 지금 1 년 넘게 Resharper를 사용해 왔으며, 사례에 민감한 방식으로 당신을 돕는 것이 매우 현명하다는 것을 알고 있습니다. 다른 이점 중에서도 Resharper를 설치하여 Intellisense 문제가 해결됩니다.

편집 2

방금 확인했습니다. FXCOP 나 RESHARPER는이 오류를 직접 포착하지 않습니다. 둘 다 잡는 일은 FOO 메소드에서 ISAction 매개 변수가 사용되지 않는다는 사실입니다. 이 경우 경고는 실수에 대한 단서를 제공합니다. 매개 변수가 방법 내에서 다른 방식으로 사용되는 경우 정적 코드 분석을 통해 미끄러질 수 있습니다.

FXCOP는 ISACTION 매개 변수가 사용되지 않기 때문에 이에 대해 불평합니다. 특히 규칙 CA1801 : reviewUnusedParameters를 가져옵니다.

개인적으로 나는 항상 C# 컴파일러가 사용하지 않은 매개 변수에 대한 경고를해야한다고 생각했습니다.

이것은 항상 나를 얻습니다. 나는 '_'를 사용하여 생성자로 전달되는 선불 변수로 가져갔습니다.

class Foo
{    
    public Foo(bool _isAction)
    {
        this.IsAction = _isAction;
    }
    public bool IsAction { get; private set; }}

"암시 적"을 비활성화 할 방법이 없어 this"기능. 언어 사양 및 컴파일러의 일부이며,이를 끄는 방법이 없습니다.

개인적으로, 나는 이것을 큰 문제라고 생각하지 않습니다. 분명히, 멤버 및 매개 변수 이름의 대문자에주의를 기울여야하지만, 이것은 항상 C#과 같은 대변인에 민감한 언어의 상황입니다.

내가 추천하는 "솔루션"(이미하고있는 것 같음)은 항상 사용하는 것입니다. this 속성/필드를 참조하기위한 키워드 매개 변수를 사용해야 할 때 즉시 눈에 띄도록해야합니다. 그것은 당신을 위해 문제를 해결하지 못할 것이지만, 당신이 그것을 명심하면 의심 할 여지없이 도움이 될 것입니다. 이것의 습관을 얻는 것 (그리고 기억할뿐만 아니라 모든 매개 변수/로컬 변수 이름은 소문자로 시작해야합니다.) 앞으로이 문제를 피하는 것이 좋습니다.

Visual Studio의 Intellisense에서는 성가신 문제입니다. resharper 그래도 대부분의 시간을 제대로 얻습니다.

나는 개발자가 Intellisense의 "Isaction"대신 "isaction"을 선택했을 가능성이 더 높다고 생각합니다. 나는 Intellisense가 "Isa"가 "this.isaction"으로 바뀔 것이라고 생각하지 않습니다.

이름이 경우에만 차이가 있다면 이와 같은 실수를 방지하는 유일한 방법은 그것들을 인식하고 신중하고 단위 테스트를 효과적으로 사용하는 것입니다.

다른 역량은 성가 시지만 지능적인 멤버를 사전 선택하도록하는 옵션을 끄는 옵션을 끄울 수 있습니다. 문제가 실제로 해결되지는 않지만 실제로 올바른 항목을 선택하지 않으면 우발적 인 탭을 방지하는 데 도움이 될 수 있습니다.

메모:

Resharper를 사용하는 경우이 코드를 많이 쓰고 오류를 피하는 바로 가기가 있습니다.

먼저 속성을 작성한 다음 Alt-in을 누른 다음 "생성자 생성"을 선택하거나 Protactor에 "ISAction"을 추가하고 매개 변수의 CARET으로 Alt-Enter를 누르고 "Create and"를 선택할 수 있습니다. 팝업 된 메뉴에서 자동 프로퍼티 ISACTION 작업을 초기화하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top