Saya memiliki kode berikut:
return "[Inserted new " + typeof(T).ToString() + "]";
Tapi
typeof(T).ToString()
mengembalikan nama lengkap termasuk namespace
Apakah ada cara untuk mendapatkan nama kelas (tanpa kualifikasi namespace?)
c#
namespaces
typeof
leora
sumber
sumber
string1 + anything.ToString() + string2
itu berlebihan. Kompiler memasukkan panggilan keToString
secara otomatis jika Anda melakukannyastring1 + anything + string2
.Type
contoh (seperti yang dikembalikan olehtypeof(..)
) Saya cukup yakin Anda akan mengetahuinya sendiri ...Jawaban:
sumber
Name
tidak mempertimbangkan parameter tipe.this.GetType().Name
,,this.GetType().FullName
dll. Jika berurusan dengan instance.Name
juga tidak mempertimbangkan tipe bersarang!Coba ini untuk mendapatkan parameter tipe untuk tipe umum:
Mungkin bukan solusi terbaik (karena rekursi), tetapi berhasil. Outputnya terlihat seperti:
sumber
StringBuilder
dalam setiap panggilan rekursif (bahkan kasus dasar ketika tidak digunakan), namun mengabaikanstring.Join
lambda sementara dan LINQ. Cukup gunakanString
sampai Anda tahu itu hambatan. / katamemanfaatkan ( Tipe Properti )
sumber
typeof (T) .Nama;
sumber
Setelah C # 6.0 (termasuk) Anda dapat menggunakan nama ekspresi:
Catatan!
nameof
tidak mendapatkan Jenis runtime objek yang mendasarinya, itu hanya argumen waktu kompilasi. Jika suatu metode menerima IEnumerable maka nameof hanya mengembalikan "IEnumerable", sedangkan objek yang sebenarnya bisa menjadi "Daftar".sumber
nameof
tidak mengembalikan namaType
nameof
mengembalikan namaType
tangkapan layar, dengan bukti: prntscr.com/irfk2cType
, itu hanya argumen waktu kompilasi. Jika suatu metode menerima suatu,IEnumerable
makanameof
cukup mengembalikan "IEnumerable", sedangkan objek yang sebenarnya adalah "List <string>". Itu tidak berpikir itu menjawab pertanyaan OP.cara terbaik untuk menggunakan:
sumber
obj.GetType().BaseType.Name
Hasil tes saya kembali"TypeInfo"
yang bukan solusi yang diinginkan seperti yang saya harapkan.