Ini tidak benar. istidak memeriksa apakah suatu objek dapat dilemparkan ke tipe tertentu. Integer menghasilkan denda panjang tetapi 10 is longsalah.
Martin Smith
9
@MartinSmith: Anda mencampurkan konversi tipe dengan casting. Sebuah integer dapat diubah menjadi panjang, tetapi tidak dapat dicor menjadi panjang karena tidak panjang.
Guffa
2
Anda memberi tahu saya bahwa bilangan bulat tidak dapat dilemparkan terlalu lama? Itu (long)some_integerakan gagal? Saya cukup yakin kita berdua tahu itu tidak benar bahkan tanpa menjalankannya jadi tolong jelaskan apa yang Anda maksud.
Martin Smith
12
@MartinSmith: Anda masih bingung antara casting dengan konversi. Anda tidak mentransmisikan bilangan bulat menjadi panjang, Anda mengubah bilangan bulat menjadi panjang. Meskipun mereka menggunakan sintaks yang sama, referensi dicor dan nilai diubah.
Guffa
2
Catatan tentangis : " Perhatikan bahwa operator is hanya mempertimbangkan konversi referensi, konversi boxing, dan konversi unboxing. Konversi lain, seperti konversi yang ditentukan pengguna, tidak dipertimbangkan. " (Msdn.microsoft.com/en-us/library/scekt9xw .aspx). Aboutas : " Perhatikan bahwa operator as hanya melakukan konversi referensi, konversi nullable, dan konversi tinju. Operator as tidak dapat melakukan konversi lain, seperti konversi yang ditentukan pengguna, yang seharusnya dilakukan dengan menggunakan ekspresi cast. " ( Msdn .microsoft.com / en-us / library / cscsdfbt.aspx )
user1234567
33
Perbedaan antara IS dan As adalah ..
IS - Operator Is digunakan untuk memeriksa Kompatibilitas Objek dengan Jenis yang diberikan dan mengembalikan hasil sebagai Boolean (Benar Atau Salah).
AS - Sebagai Operator digunakan untuk Casting Objek ke Jenis atau Kelas tertentu.
Ex.
Student s = obj asStudent;
setara dengan:
Student s = obj isStudent?(Student)obj :(Student)null;
Persamaan itu dengan jelas menunjukkan mana di antara keduanya yang lebih primitif dan mendasari hubungan mereka dengan elegan! Terima kasih atas kesetaraannya!
Musa Al-hassy
1
@ MusaAl-hassy Sebenarnya ini tidak menunjukkan mana yang lebih primitif. isbisa diekspresikan dengan asdan asbisa diekspresikan dengan is. Berikut ini cara membuat isdengan askata kunci. Bool b = obj is Student; setara dengan: Bool b = (obj as Student) != null; Lebih lanjut tentang ini di sini
Alex Telon
8
Keduanya isdan askata kunci digunakan untuk jenis casting di C #.
Saat Anda melihat kode IL dari penggunaan kedua kata kunci, Anda akan mendapatkan perbedaannya dengan mudah.
C # Kode:
BaseClass baseclassInstance =newDerivedClass();DerivedClass derivedclassInstance;if(baseclassInstance isDerivedClass){
derivedclassInstance =(DerivedClass)baseclassInstance;// do something on derivedclassInstance}
derivedclassInstance = baseclassInstance asDerivedClass;if(derivedclassInstance !=null){// do something on derivedclassInstance}
Kode IL (untuk kode C # di atas ada pada gambar terlampir):
Kode IL untuk ispenggunaan kata kunci berisi instruksi IL baik isinstadan castclass.
Tetapi kode IL untuk aspenggunaan kata kunci hanya memiliki isinsta.
Dalam penggunaan yang disebutkan di atas, dua typecast akan terjadi di mana iskata kunci digunakan dan hanya satu typecast di mana askata kunci digunakan.
Catatan: Jika Anda menggunakan iskata kunci untuk memeriksa suatu kondisi dan tidak tertarik dengan hasil typecast, maka typecast hanya akan ada satu, yaitu
if(baseclassInstance isDerivedClass){// do something based on the condition check.}
isdan askata kunci akan digunakan berdasarkan kebutuhan.
Kata kunci is memeriksa apakah nilai di sisi kirinya adalah turunan dari jenis di sisi kanan. Sebagai contoh:
if(obj isstring){...}
Perhatikan bahwa dalam kasus ini Anda harus menggunakan cast ekstra eksplisit untuk mendapatkan obj sebagai string.
Kata kunci as digunakan untuk mentransmisikan tipe nullable. Jika nilai yang ditentukan bukan turunan dari tipe yang ditentukan, null dikembalikan. Sebagai contoh:
Operator "sebagai" juga tidak akan mengeluarkan pengecualian, itu hanya akan mengembalikan nol.
Pinte Dani
Memperbaiki kesalahan ketik terkait 'is' dan 'as'
Patrick Peters
2
Is operator, a cast, mengembalikan nilai true jika berhasil. Ini mengembalikan false jika gips gagal. Dengan itu, Anda tidak dapat menangkap variabel yang dikonversi. Operator ini paling berguna saat memeriksa tipe dalam pernyataan dan ekspresi if. Is-cast hanya ideal jika variabel yang dihasilkan tidak akan diperlukan untuk penggunaan lebih lanjut
Seperti para pemeran. Dengan itu, kami mendapatkan performa dan menghindari pengecualian saat cast tidak valid. Null dikembalikan ketika cast tidak memungkinkan. Untuk tipe referensi, disarankan menggunakan as-cast. Ini cepat dan aman. Kita dapat menguji variabel yang dihasilkan terhadap null dan kemudian menggunakannya. Ini menghilangkan gips ekstra
is OPERATOR
Operator is di C # digunakan untuk memeriksa tipe objek dan mengembalikan nilai bool: true jika objek adalah tipe yang sama dan false jika tidak. atau juga Operator “is” digunakan untuk memeriksa apakah tipe run-time suatu objek kompatibel dengan tipe tertentu atau tidak. Untuk objek null, ia mengembalikan false misalnya
if(obj isAnimalObject){//Then Work}
sebagai OPERATOR
Operator as melakukan pekerjaan yang sama dengan operator is tetapi perbedaannya adalah alih-alih bool, ia mengembalikan objek jika kompatibel dengan tipe itu, jika tidak ia mengembalikan null. Dengan kata lain, operator 'as' digunakan untuk melakukan konversi antara yang kompatibel jenis.
misalnya
Type obj =ObjectasType;
Keuntungan dari as over is
Dalam kasus operator, untuk mengetik cor, kita perlu melakukan dua langkah:
Check the Type using isIf it’s true then Type cast
Sebenarnya ini mempengaruhi kinerja karena setiap kali CLR akan melalui hierarki pewarisan, memeriksa setiap jenis dasar terhadap jenis yang ditentukan.
Untuk menghindarinya, gunakan sebagai, ini akan melakukannya dalam satu langkah. Hanya untuk mengecek type kita harus menggunakan operator is.
Jawaban Anda benar, tetapi kode sampel Anda adalah anti-pola. Ini mahal untuk melakukan ismaka as: itu unboxes dua kali. Untuk jenis referensi, Anda harus melakukannya as, lalu periksa null untuk melihat apakah berfungsi.
Steven Sudit
1
Lihat video youtube di bawah ini yang menjelaskan perbedaannya dengan cara yang lebih demonstratif dan visual: -
Di bawah ini adalah jawaban panjang dengan penjelasan kode.
Kata kunci "IS" berguna untuk memeriksa apakah objek kompatibel dengan suatu tipe. Misalnya pada kode di bawah ini kami memeriksa apakah objek "ocust" adalah jenis kelas "Pelanggan".
object ocust =newCustomer();if(ocust isCustomer){
Kata kunci “AS” membantu melakukan konversi dari satu jenis ke jenis lainnya. Misalnya dalam kode di bawah ini kami mengubah objek menjadi tipe data string. Jika kata kunci "AS" tidak dapat mengetik cast, ia mengembalikan NULL.
IS Keyword -> memeriksa apakah tipe dari objek yang diberikan sesuai dengan tipe objek baru. Itu Tidak Pernah Melempar pengecualian. Ini adalah tipe Boolean..mengembalikan benar atau salah
`student stud =new student(){}if(stud is student){}// It returns true // let say boys as derived classif(stud is boys){}// It returns false since stud is not boys type//this returns true when,
student stud =new boys()// this return true for both if conditions.`
Kata kunci AS: memeriksa apakah tipe objek yang diberikan kompatibel dengan tipe objek baru. Ia mengembalikan non-null jika objek yang diberikan kompatibel dengan yang baru, jika tidak null .. Ini melempar pengecualian.
`student stud =new student(){}// let say boys as derived class
boys boy = stud as boys;//this returns null since we cant convert stud type from base class to derived class
student stud =new boys()
boys boy = stud as boys;// this returns not null since the obj is pointing to derived class`
Kedua operator digunakan untuk pengecoran tipe aman.
SEBAGAI Operator:
Operator AS juga memeriksa apakah tipe objek yang diberikan kompatibel dengan tipe objek baru. Kata kunci ini akan memeriksa apakah tipe objek yang diberikan kompatibel dengan tipe objek baru. Jika tidak kompatibel dengan yang baru maka itu akan mengembalikan NULL.
Operator IS:
Operator ini memeriksa apakah tipe suatu objek kompatibel dengan objek baru. Jika itu kompatibel itu mengembalikan true jika tidak salah.
Jawaban:
adalah
The
is
Operator memeriksa apakah sebuah objek dapat dilemparkan ke jenis tertentu.Contoh:
sebagai
The
as
Operator upaya untuk melemparkan objek untuk jenis tertentu, dan kembali nol jika gagal.Contoh:
Juga terkait:
Pengecoran
The cast operator upaya untuk melemparkan objek untuk jenis tertentu, dan melempar exeption jika gagal.
Contoh:
sumber
is
tidak memeriksa apakah suatu objek dapat dilemparkan ke tipe tertentu. Integer menghasilkan denda panjang tetapi10 is long
salah.(long)some_integer
akan gagal? Saya cukup yakin kita berdua tahu itu tidak benar bahkan tanpa menjalankannya jadi tolong jelaskan apa yang Anda maksud.is
: " Perhatikan bahwa operator is hanya mempertimbangkan konversi referensi, konversi boxing, dan konversi unboxing. Konversi lain, seperti konversi yang ditentukan pengguna, tidak dipertimbangkan. " (Msdn.microsoft.com/en-us/library/scekt9xw .aspx). Aboutas
: " Perhatikan bahwa operator as hanya melakukan konversi referensi, konversi nullable, dan konversi tinju. Operator as tidak dapat melakukan konversi lain, seperti konversi yang ditentukan pengguna, yang seharusnya dilakukan dengan menggunakan ekspresi cast. " ( Msdn .microsoft.com / en-us / library / cscsdfbt.aspx )Perbedaan antara IS dan As adalah ..
IS - Operator Is digunakan untuk memeriksa Kompatibilitas Objek dengan Jenis yang diberikan dan mengembalikan hasil sebagai Boolean (Benar Atau Salah).
AS - Sebagai Operator digunakan untuk Casting Objek ke Jenis atau Kelas tertentu.
Ex.
setara dengan:
sumber
is
bisa diekspresikan denganas
danas
bisa diekspresikan denganis
. Berikut ini cara membuatis
denganas
kata kunci.Bool b = obj is Student;
setara dengan:Bool b = (obj as Student) != null;
Lebih lanjut tentang ini di siniKeduanya
is
danas
kata kunci digunakan untuk jenis casting di C #.Saat Anda melihat kode IL dari penggunaan kedua kata kunci, Anda akan mendapatkan perbedaannya dengan mudah.
C # Kode:
Kode IL (untuk kode C # di atas ada pada gambar terlampir):
Kode IL untuk
is
penggunaan kata kunci berisi instruksi IL baikisinsta
dancastclass
.Tetapi kode IL untuk
as
penggunaan kata kunci hanya memilikiisinsta
.Dalam penggunaan yang disebutkan di atas, dua typecast akan terjadi di mana
is
kata kunci digunakan dan hanya satu typecast di manaas
kata kunci digunakan.Catatan: Jika Anda menggunakan
is
kata kunci untuk memeriksa suatu kondisi dan tidak tertarik dengan hasil typecast, maka typecast hanya akan ada satu, yaituis
danas
kata kunci akan digunakan berdasarkan kebutuhan.sumber
Kata kunci is memeriksa apakah nilai di sisi kirinya adalah turunan dari jenis di sisi kanan. Sebagai contoh:
Perhatikan bahwa dalam kasus ini Anda harus menggunakan cast ekstra eksplisit untuk mendapatkan obj sebagai string.
Kata kunci as digunakan untuk mentransmisikan tipe nullable. Jika nilai yang ditentukan bukan turunan dari tipe yang ditentukan, null dikembalikan. Sebagai contoh:
sumber
Saya akan mengatakan: baca MSDN online, tetapi ini dia:
Operator is memeriksa apakah suatu objek kompatibel dengan tipe tertentu, dan hasil evaluasi adalah Boolean: true atau false.
Operator as tidak akan pernah mengeluarkan pengecualian.
sumber
Is operator, a cast, mengembalikan nilai true jika berhasil. Ini mengembalikan false jika gips gagal. Dengan itu, Anda tidak dapat menangkap variabel yang dikonversi. Operator ini paling berguna saat memeriksa tipe dalam pernyataan dan ekspresi if. Is-cast hanya ideal jika variabel yang dihasilkan tidak akan diperlukan untuk penggunaan lebih lanjut
Seperti para pemeran. Dengan itu, kami mendapatkan performa dan menghindari pengecualian saat cast tidak valid. Null dikembalikan ketika cast tidak memungkinkan. Untuk tipe referensi, disarankan menggunakan as-cast. Ini cepat dan aman. Kita dapat menguji variabel yang dihasilkan terhadap null dan kemudian menggunakannya. Ini menghilangkan gips ekstra
sumber
sumber
is OPERATOR Operator is di C # digunakan untuk memeriksa tipe objek dan mengembalikan nilai bool: true jika objek adalah tipe yang sama dan false jika tidak. atau juga Operator “is” digunakan untuk memeriksa apakah tipe run-time suatu objek kompatibel dengan tipe tertentu atau tidak. Untuk objek null, ia mengembalikan false misalnya
sebagai OPERATOR
Operator as melakukan pekerjaan yang sama dengan operator is tetapi perbedaannya adalah alih-alih bool, ia mengembalikan objek jika kompatibel dengan tipe itu, jika tidak ia mengembalikan null. Dengan kata lain, operator 'as' digunakan untuk melakukan konversi antara yang kompatibel jenis.
misalnya
Keuntungan dari as over is Dalam kasus operator, untuk mengetik cor, kita perlu melakukan dua langkah:
Sebenarnya ini mempengaruhi kinerja karena setiap kali CLR akan melalui hierarki pewarisan, memeriksa setiap jenis dasar terhadap jenis yang ditentukan.
Untuk menghindarinya, gunakan sebagai, ini akan melakukannya dalam satu langkah. Hanya untuk mengecek type kita harus menggunakan operator is.
sumber
Operator As mirip dengan cast, tetapi mengembalikan null sebagai ganti pengecualian jika gagal.
Dan operator Is digunakan untuk memeriksa apakah satu objek kompatibel dengan tipe tertentu. Biasanya digunakan dalam pernyataan If.
sumber
is
: Operator is digunakan untuk memeriksa apakah tipe run-time suatu objek kompatibel dengan tipe yang diberikanas
: Operator as digunakan untuk melakukan konversi antara tipe yang kompatibel.sumber
is
makaas
: itu unboxes dua kali. Untuk jenis referensi, Anda harus melakukannyaas
, lalu periksa null untuk melihat apakah berfungsi.Lihat video youtube di bawah ini yang menjelaskan perbedaannya dengan cara yang lebih demonstratif dan visual: -
https://www.youtube.com/watch?v=IKmRtJcRX_I
Di bawah ini adalah jawaban panjang dengan penjelasan kode.
Kata kunci "IS" berguna untuk memeriksa apakah objek kompatibel dengan suatu tipe. Misalnya pada kode di bawah ini kami memeriksa apakah objek "ocust" adalah jenis kelas "Pelanggan".
Kata kunci “AS” membantu melakukan konversi dari satu jenis ke jenis lainnya. Misalnya dalam kode di bawah ini kami mengubah objek menjadi tipe data string. Jika kata kunci "AS" tidak dapat mengetik cast, ia mengembalikan NULL.
sumber
vs.
Yang kedua akan mengembalikan null jika obj bukan MyClass, daripada membuang pengecualian cast kelas.
adalah hanya akan mengembalikan true atau false
sumber
Baik IS dan AS digunakan untuk Safe Type Casting
IS Keyword -> memeriksa apakah tipe dari objek yang diberikan sesuai dengan tipe objek baru. Itu Tidak Pernah Melempar pengecualian. Ini adalah tipe Boolean..mengembalikan benar atau salah
Kata kunci AS: memeriksa apakah tipe objek yang diberikan kompatibel dengan tipe objek baru. Ia mengembalikan non-null jika objek yang diberikan kompatibel dengan yang baru, jika tidak null .. Ini melempar pengecualian.
sumber
Kedua operator digunakan untuk pengecoran tipe aman.
SEBAGAI Operator:
Operator AS juga memeriksa apakah tipe objek yang diberikan kompatibel dengan tipe objek baru. Kata kunci ini akan memeriksa apakah tipe objek yang diberikan kompatibel dengan tipe objek baru. Jika tidak kompatibel dengan yang baru maka itu akan mengembalikan NULL.
Operator IS:
Operator ini memeriksa apakah tipe suatu objek kompatibel dengan objek baru. Jika itu kompatibel itu mengembalikan true jika tidak salah.
sumber