2009-04-21 4 views
2

나는 이것이 아마도 용어 불일치라는 것을 알고 있지만, 만약 내가 실수라고 생각하지 않는다면 C#이 무엇이라고 생각합니까? 내가 명백한 무엇인가 놓치지 않는 한? ??어떻게이 값을 상수 값으로 사용할 수 없습니까?

... 
    private const uint URL_COUNT = 18; 
    private string[] _urls; 

    public Redirector() 
    { 
     this._urls = new string[URL_COUNT]; 
     ... 
    } 
... 

결과는 "상수 값이 필요합니다"이며 배열 정의에 URL_COUNT이 (가) 있습니까?

const -ant 값이 아닌 경우 URL_COUNT는 무엇입니까?!?!

EDIT 피우, 잠깐 생각해 보니 화가났습니다. 아무도 이것이 지역의 일이라는 것을 의미하는만큼 이것을 재현 할 수 없어서 다행입니다. 도움 주셔서 감사합니다.

+0

새로운 Windows 응용 프로그램에이 플러그를 연결하고 const로 크기에 맞게 배열을 정의했습니다. ASP.net 코드 숨김 또는 명령 줄 앱과 같이 실패한 위치에 대한 자세한 정보를 제공 할 수 있습니까? –

+0

이 코드는 컴파일되지 않는 정확한 코드입니까? 아니면 실수로 거기에서 뭔가를 편집 했습니까? 나는 그것이 단지 '지역적'일이라고는 의심 스럽다. 컴파일러간에 '로컬'차이점은 없습니다 (아는 한 확실하지만 그럼에도 불구하고). – Razzie

답변

9

차원 길이와 배열 초기화 프로그램을 모두 제공하면 컴파일되지 않습니다. 예를 들어 :

this._urls = new string[URL_COUNT]; 

잘 수 있지만됩니다

this._urls = new string[URL_COUNT] { "One", "Two" }; 

는하지 않습니다. 후자는 상수 을 필요로합니다. const 변수는 상수 값이 아니라 상수 값입니다.

배열 생성 식 명시 차원 길이 및 배열 이니셜 모두 포함

에서, 길이 상수 식이어야 각 중첩의 소자의 수 : 12.6 파는 C# 사양 (3.0)에서 수준은 일치하는 치수 길이 인 과 일치해야합니다.

+0

+1 오류에 대한 그럴듯한 설명입니다. 이 특정 오류가 생성되었을 수있는 다른 방법은 없습니다. –

+0

예를 단순화하기 위해 이니셜 라이저를 제거했지만 문제의 원인이 될 수 있다는 것을 전혀 모릅니다! –

+0

많은 생각! 기꺼이 도와 줬다. – Razzie

5

상수이므로 잘 작동해야합니다. 다음 코드는 C# 3 컴파일러를 사용하여 나에게 잘 컴파일되었습니다.

using System; 

class Foo 
{ 
    private const uint URL_COUNT = 18; 
    private string[] _urls; 

    public Foo() 
    { 
     this._urls = new string[URL_COUNT]; 
    } 
} 
+0

그래,이 중 하나를 repro 수 없습니다. –

+0

이니셜 라이저와 치수 길이를 모두 입력해야합니다. 저자가 실수로 예제 코드를 편집하여 작동한다고 생각합니다. – Razzie

2

이 방법도 컴파일러의 불만없이 작동합니다.

class Foo { 
    private const uint URL_COUNT = 18; 
    private readonly string[] _urls = new string[URL_COUNT]; 
} 
관련 문제