var cv = (new CustomValidator()
{
ErrorMessage="Formato de telefone inválido",
ControlToValidate = "txtTelefoneIni", //<-- see the extra comma
});
Odpowiedz
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.
Słyszałem, że zostało to legalne na korzyść ludzi, którzy piszą generatory kodu. Kto wie? Wygląda trochę niechlujnie. – Will
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
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. –
Jest celowy. Działa również na członkach enum. (więc łatwiej jest dodać więcej rzeczy)
Dlaczego nie powinien się on kompilować?
Ten rodzaj składni jest również legalny w Pythonie.
Myślałem, że ponieważ SQL ANSI i JScript nie pozwalają nam na takie rzeczy. – Cleiton
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
SQL i JScript to inne języki i nie są to C# 3.0 ani Python. – yfeldblum
Kompiluje, ponieważ jest poprawna składnia C#. Możesz także zrobić to samo z tablicami
string [] meh = {"a", "b", "c",};
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.
Jest to ważny składni w C#
pozwala zobaczyć
var c = new List<int>() { 1, 2, 3 ,};
Jest częścią C# language specification: inicjatorów obiektu.
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.
- 1. Dlaczego/jak to się kompiluje?
- 2. Ciąg konkatenacji, dlaczego to się kompiluje?
- 3. Dlaczego to się kompiluje w Ideone?
- 4. Dziwne użycie const - dlaczego to się kompiluje?
- 5. Java: dlaczego to się nie kompiluje?
- 6. A() = A() - dlaczego się kompiluje?
- 7. "loop:" w kodzie Java. Co to jest, dlaczego się kompiluje?
- 8. instanceof w Javie - dlaczego to się nie kompiluje?
- 9. Dlaczego "ELSE:" kompiluje się w vb.net?
- 10. Dlaczego kombinacja wyrażeń dopasowywania nie kompiluje się?
- 11. Dlaczego ten kod Haskella się kompiluje?
- 12. dlaczego to Eclipse kompiluje ten kod Java, ale nie Ant?
- 13. Dlaczego C# kompiluje się znacznie szybciej niż C++?
- 14. Dlaczego ten program C kompiluje się bez błędu?
- 15. Dlaczego ten kod nie kompiluje się w g ++
- 16. Dlaczego i jak ten kod Java się kompiluje?
- 17. Dlaczego `++ a ++` nie kompiluje się w C++, ale `(++ a) ++` ma?
- 18. Czy Scala.js się nie kompiluje?
- 19. android takePersistableUriPermission nie kompiluje się
- 20. Plik generujący wiązania XML nie kompiluje się.
- 21. Wywołanie równości (""); sam się kompiluje i uruchamia
- 22. Wtyczka Jenkins powershell zawsze kompiluje się pomyślnie
- 23. Projekt Javafx nie kompiluje się z maven
- 24. Rozpocznij debugowanie F5 nie kompiluje się automatycznie
- 25. Playframework 2.5.0 Szablon się nie kompiluje (nowy)
- 26. Java 8 - Ternary operator return function nie kompiluje się
- 27. Projekt biblioteki Xcode 7.3 kompiluje się za każdym razem
- 28. dlaczego CLR nie kompiluje przepełnienia const, ale dla zmiennych to robi?
- 29. DbContext nie kompiluje?
- 30. omp dla z klauzulą zwinięcia nie kompiluje się
To legalne, cv staje się nową CustomValidator. Pola CV są jawnie inicjowane zamiast przekazywania parametrów za pośrednictwem konstruktora. – Maciek