Saya ingin menggunakan metode DateTime.TryParse untuk mendapatkan nilai datetime dari sebuah string menjadi Nullable. Tetapi ketika saya mencoba ini:
DateTime? d;
bool success = DateTime.TryParse("some date text", out (DateTime)d);
kompilator memberitahu saya
Argumen 'out' tidak diklasifikasikan sebagai variabel
Tidak yakin apa yang harus saya lakukan di sini. Saya juga mencoba:
out (DateTime)d.Value
dan itu juga tidak berhasil. Ada ide?
Seperti yang dikatakan Jason, Anda dapat membuat variabel dengan tipe yang tepat dan meneruskannya. Anda mungkin ingin merangkumnya dalam metode Anda sendiri:
... atau jika Anda menyukai operator bersyarat:
Atau di C # 7:
sumber
Parse
mengharapkannya untuk kembaliDateTime
dan melempar pengecualian pada kegagalan, bukan? Tapi ya, Anda dapat melakukan apa pun yang Anda inginkan ... dan di Noda Time, saya telah menamai metode yang relevanParse
sebagai gantinya.else
kunci tidak diperlukan (dalam contoh pertama Anda) karena titik akhirif
blok tidak pernah bisa dicapai.Ini adalah edisi yang sedikit ringkas dari saran Jason:
sumber
Anda tidak bisa karena
Nullable<DateTime>
merupakan tipe yang berbeda denganDateTime
. Anda perlu menulis fungsi Anda sendiri untuk melakukannya,Semoga ini membantu :)
EDIT: Menghapus metode ekstensi yang (jelas) tidak teruji dengan benar, karena (seperti yang ditunjukkan oleh beberapa kesalahan) metode ekstensi yang mencoba mengubah parameter "ini" tidak akan berfungsi dengan Jenis Nilai.
PS The Bad Hoor yang dimaksud adalah teman lama :)
sumber
Bagaimana dengan membuat metode ekstensi?
sumber
dateTime
? Itu tidak pernah digunakan.DateTime? TryParse(this string dateString)
. Penerapan ini sungguh aneh.(DateTime?).TryParse( ... )
atauNullable<DateTime>.TryParse( ... )
. Jadi mike z benar, ini adalah tanda tangan konyol untuk metode ini.Saya tidak mengerti mengapa Microsoft tidak menangani ini. Sebuah metode utilitas kecil yang cerdas untuk menangani ini (saya punya masalah dengan int, tetapi mengganti int dengan DateTime akan memiliki efek yang sama, bisa jadi .....
sumber
Ini adalah satu-satunya liner yang Anda cari:
Jika Anda ingin menjadikannya metode ekstensi semu TryParse yang tepat, Anda dapat melakukan ini:
sumber
Berikut solusi satu baris:
sumber
Alternatifnya, jika Anda tidak khawatir dengan kemungkinan pengecualian yang dimunculkan, Anda dapat mengubah TryParse untuk Parse:
Meskipun tidak akan ada boolean yang menunjukkan keberhasilan, ini bisa menjadi praktis dalam beberapa situasi di mana Anda tahu bahwa teks masukan akan selalu valid.
sumber