Η ερώτηση ποιά είναι? Γιατί o debugger εμφανίζει το περιεχόμενο με το Invariant Culture (ΟΧΙ το US format) ενώ η εφαρμογή η οποία τρέχει στο ελληνικό locale το εμφανίζει με το locale? Δεν υπάρχει τίποτε περίεργο.
Η default συμπεριφορά όταν χρειάζεται να γίνει μετατροπή μίας τιμής σε string, είναι να χρησιμοποιηθεί το format που ορίζεται στο Thread.CultureInfo. Η αρχικη τιμή αυτού του CultureInfo προέρχεται από το system locale. Αν όμως η τιμή αυτή χρησιμοποιηθεί για ο,τιδήποτε πέρα από το να δείξεις ένα μήνυμα στο χρήστη, π.χ. για να αποθηκευτεί σε βάση, υπάρχει το πρόβλημα ότι αλλιώς θα κάνει τη μετατροπή ένας client που έχει ρυθμιστεί στα Ελληνικά και αλλιώς κάποιος που είναι ακόμα στα US English.
Η λύση ΔΕΝ είναι να αναγκάσεις το σύμπαν να γυρίσει στα Ελληνικά, παρότι πολλές ελληνικές εφαρμογές το προσπαθούν αυτό (το άτιμο το σύμπαν δεν συνεργάζεται). Η λύση είναι να χρησιμοποιήσεις το InvariantCulture, το οποίο εξασφαλίζει ότι τα δεκαδικά θα έχουν πχ. πάντα . αντί για , κλπ.
Από εδώ και πέρα, η κάθε εφαρμογή μπορεί να αλλάξει το Thread.CultureInfo στη γλώσσα που θέλει. Έτσι μπορεί το Visual Studio να ορίζει ότι θα δείξει τις τιμές του debugger χρησιμοποιώντας το locale της γλώσσας του, δηλαδή τα Αγγλικά. Μπορεί η Γερμανική έκδοση να τα δείχνει διαφορετικά.
Έτσι κι αλλιώς, δεν έχει καμμία σημασία πως θα φανούν αυτά στον debugger καθώς η τιμή παραμένει πάντα Date, δεν μετατρέπεται ποτέ σε string. Δεν υπάρχει θέμα μήπως μπλεχτούν μήνες με μέρες, εκτός και αν ο κώδικας σου όταν τρέχει προκαλέσει το πρόβλημα.
Το τί θα δείξει ο debugger επηρεάζεται από το
DebuggerDisplayAttribute ενός τύπου. Αν αυτό δεν υπάρχει, θα εμφανιστεί το αποτέλεσμα της κλήσης της ToString() επάνω στο αντικείμενο. Αναγκαστικά, η μετατροπή σε string θα γίνει χρησιμοποιώντας το Thread.CurrentCulture του Visual Studio με αποτέλεσμα οι τιμές να εμφανιστούν στο αντίστοιχο format.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos