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

To legalne, cv staje się nową CustomValidator. Pola CV są jawnie inicjowane zamiast przekazywania parametrów za pośrednictwem konstruktora. – Maciek

Odpowiedz

12

Ponieważ jest to prawna składnia.

Naprawdę tak jest.

Podczas konstruowania obiektu przy użyciu składni inicjalizatora obiektu, możesz zostawić przecinek końcowy po ostatnim elemencie, nawet jeśli zakończysz blok inicjalizatora w tym miejscu.

Przyczyną tego jest prawdopodobnie to, że łatwiej będzie wrócić i edytować później, ponieważ zapominając o dodaniu przecinka po tym, jak poprzedni element jest nr 1 podczas kompilacji z inicjalizatorami obiektów.

+1

Słyszałem, że zostało to legalne na korzyść ludzi, którzy piszą generatory kodu. Kto wie? Wygląda trochę niechlujnie. – Will

+1

To również fajnie z punktu widzenia kontroli wersji - możesz dodać kolejny wpis bez modyfikowania żadnych linii, więc różnica jest czystsza. – Cascabel

+0

Mam dwa umysły na ten temat, szczerze mówiąc. Osobiście nie dodaję tych przecinków, dodam je, kiedy ich potrzebuję, ale widzę również punkt dotyczący generatorów kodu, z których również korzystam, więc nie jest to idealne rozwiązanie w obu kierunkach. Tak czy inaczej, tu zostanie. –

2

Jest celowy. Działa również na członkach enum. (więc łatwiej jest dodać więcej rzeczy)

2

Dlaczego nie powinien się on kompilować?

Ten rodzaj składni jest również legalny w Pythonie.

+0

Myślałem, że ponieważ SQL ANSI i JScript nie pozwalają nam na takie rzeczy. – Cleiton

+0

IE nie dopuszczając przecinania przecinków w JavaScript było źródłem wielu małych błędów dla nas.Chociaż nie jest tak dużo, że IE na to nie pozwala, dodaje tylko element "undefined" na końcu tablicy. – JulianR

+0

SQL i JScript to inne języki i nie są to C# 3.0 ani Python. – yfeldblum

2

Kompiluje, ponieważ jest poprawna składnia C#. Możesz także zrobić to samo z tablicami

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

1

Ponieważ jest to dozwolone. Ogólnie rzecz biorąc, zezwalanie na przecinki końcowe w takich formach (a właściwie używanie tego "uprawnienia") jest użyteczne, aby programiści mogli dodawać kolejne pozycje do listy bez ryzyka zapomnienia o dodaniu przecinka na końcu poprzedniego elementu.

1

Jest to ważny składni w C#

pozwala zobaczyć

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

FWIW, było już ważne w C.

Mój ulubiony powód, aby użyć takiego składni (zwłaszcza przy określaniu teksty stałe) jest to, że jeśli dodać element do listy, kontrola źródło widzi zmiany w jednej linii tylko (nowy). Nie oznacza to poprzednio zmodyfikowanej (z powodu dodania przecinka). Znacznie bardziej czytelne różnice.

Moje 2 centy.

Powiązane problemy