2009-10-23 7 views
5
  var cv = (new CustomValidator() 
      { 
       ErrorMessage="Formato de telefone inválido", 
       ControlToValidate = "txtTelefoneIni", //<-- see the extra comma 
      }); 
+0

합법적입니다. cv가 새로운 CustomValidator가됩니다. CV의 필드는 생성자를 통해 params를 전달하는 대신 명시 적으로 초기화됩니다. – Maciek

답변

12

법적 구문입니다.

정말 그렇습니다.

개체 이니셜 라이저 구문을 사용하여 개체를 구성 할 때 이니셜 라이저 블록을 끝내더라도 마지막 항목 다음에 쉼표를 사용할 수 있습니다.

이유는 이전에 마지막 항목이 object-initializers의 # 1 컴파일 타임 문제 인 후에 쉼표를 추가하는 것을 잊어 버리기 때문에 나중에 다시 돌아와 편집하는 것이 더 쉬운 이유 일 수 있습니다.

+1

코드 생성기를 작성하는 사람들에게 이익이되는 것은 합법적이라고 들었습니다. 누가 알아? 나 한테 좀 어색해 보이는구나. – Will

+1

버전 제어 관점에서 보면 멋지 네요. 선을 수정하지 않고 다른 항목을 추가 할 수 있기 때문에 diff가 더 깨끗합니다. – Cascabel

+0

나는 솔직히 말해서 이것에 대해 두 사람의 마음을 가지고 있습니다. 개인적으로 필자는 쉼표를 추가하지 않고 필요할 때 추가하지만, 필자도 사용하는 코드 생성기에 대한 요점을 볼 수 있으므로 완벽한 해결책은 아닙니다. 어쨌든, 여기 머물러 있습니다. –

2

의도적입니다. enum 멤버에서도 작동합니다. (그래서 더 많은 것들을 추가하는 것이 더 쉽습니다)

2

왜 컴파일되지 않아야합니까?

이 구문 유형은 Python에서도 유효합니다.

+0

SQL ANSI와 JScript가 그런 일을 할 수 없기 때문에 나는 그것을 생각했다. – Cleiton

+0

JavaScript는 JavaScript에서 후행 쉼표를 허용하지 않으므로 많은 작은 버그의 원인이되었습니다.IE가 허용하지 않는 것은 아니지만 배열 끝에 'undefined'요소를 추가하기 만하면됩니다. – JulianR

+0

SQL과 JScript는 다른 언어이며 C# 3.0이나 Python이 아닙니다. – yfeldblum

2

올바른 C# 구문이기 때문에 컴파일됩니다. 또한 배열을 사용하여 동일한 작업을 수행 할 수 있습니다.

string [] meh = { "a", "b", "c",};

1

허용됩니다. 일반적으로 이러한 형식의 후행 쉼표를 허용하고 실제로 해당 "권한"을 사용하면 프로그래머가 이전 항목의 끝에 쉼표를 추가하지 않고도 목록에 항목을 추가 할 수 있으므로 유용합니다. 개체 이니셜 라이저 :

1

는 자사의 C#을

에 유효한 구문은

var c = new List<int>() { 1, 2, 3 ,}; 
1

FWIW, 그것은 (열거 형을 정의 할 때 특히)와 같은 구문을 사용하는

내가 제일 좋아하는 이유 C. 이미 유효 당신이 목록에 항목을 추가 할 때, 소스 컨트롤은 한 줄에 변화를 볼 수 있다는 것입니다 오직 (새로운 것). 그것은 (쉼표가 추가 되었기 때문에) 이전 버전을 수정 된 것으로 태그 지정하지 않습니다. 훨씬 더 쉽게 읽을 수있는 diff.

내 2 센트.

관련 문제