To nie jest poprawne. isnie sprawdza, czy obiekt może być rzutowany na określony typ. Liczba całkowita rzutuje na długą grzywnę, ale 10 is longjest fałszywa.
Martin Smith
9
@MartinSmith: Mylisz konwersję typu z rzutowaniem. Liczbę całkowitą można przekształcić w długość, ale nie można jej rzutować na długość, ponieważ nie jest ona długa.
Guffa
2
Mówisz mi, że liczby całkowitej nie można rzutować na długi? To (long)some_integersię nie powiedzie? Jestem prawie pewien, że oboje wiemy, że to nieprawda, nawet jeśli go nie uruchomiliśmy, więc wyjaśnij, co masz na myśli.
Martin Smith
12
@MartinSmith: Nadal mylisz casting z konwersją. Nie rzutujesz liczby całkowitej na long, konwertujesz liczbę całkowitą na long. Chociaż używają tej samej składni, rzutowane są odwołania, a wartości są konwertowane.
Guffa
2
Uwaga dotyczącais : „ Pamiętaj, że operator is bierze pod uwagę tylko konwersje referencyjne, konwersje typu boxing i konwersje po rozpakowaniu. Inne konwersje, takie jak konwersje zdefiniowane przez użytkownika, nie są brane pod uwagę. ” (Msdn.microsoft.com/en-us/library/scekt9xw .aspx). Informacjeas : „ Zauważ, że operator as wykonuje tylko konwersje odwołań, konwersje dopuszczające wartość null i konwersje typu boxing. Operator as nie może wykonywać innych konwersji, takich jak konwersje zdefiniowane przez użytkownika, które zamiast tego powinny być wykonywane przy użyciu wyrażeń rzutowania. ” ( Msdn .microsoft.com / en-us / library / cscsdfbt.aspx )
user1234567
33
Różnica między IS i A jest taka ...
IS - Is Operator służy do sprawdzania zgodności obiektu z danym typem i zwraca wynik jako wartość logiczną (prawda lub fałsz).
AS - As Operator służy do rzutowania obiektu na dany typ lub klasę.
Dawny.
Student s = obj asStudent;
jest równa:
Student s = obj isStudent?(Student)obj :(Student)null;
Równoważność wyraźnie pokazuje, który z nich jest bardziej prymitywny i elegancko leży u podstaw ich związku! Dzięki za równoważność!
Musa Al-hassy
1
@ MusaAl-hassy Właściwie to nie pokazuje, który jest bardziej prymitywny. ismożna wyrazić za pomocą asi asmożna wyrazić za pomocą is. Oto jak zrobić isze assłowem kluczowym. Bool b = obj is Student; jest odpowiednikiem: Bool b = (obj as Student) != null; Więcej na ten temat tutaj
Alex Telon
8
Oba isi assłowa kluczowe są używane do rzutowania typów w C #.
Kiedy spojrzysz na kod IL użycia obu słów kluczowych, łatwo zauważysz różnicę.
Kod C #:
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}
Kod IL (dla powyższego kodu C # znajduje się na załączonym obrazku):
Kod IL do isużycia słowa kluczowego zawiera instrukcje IL zarówno isinstai castclass.
Ale kod IL do asużycia słów kluczowych ma tylko isinsta.
W wyżej wymienionym użyciu, dwa typy będą miały miejsce, gdy isużywane jest słowo kluczowe, i tylko jedno typowanie, gdy asużywane jest słowo kluczowe.
Uwaga: Jeśli używasz issłowa kluczowego do sprawdzenia jakiegoś warunku i nie interesuje cię wynik rzutowania, to będzie tylko jedno rzutowanie, tj.
if(baseclassInstance isDerivedClass){// do something based on the condition check.}
isa assłowa kluczowe będą używane w zależności od konieczności.
Słowo kluczowe is sprawdza, czy wartość po jego lewej stronie jest wystąpieniem typu po prawej stronie. Na przykład:
if(obj isstring){...}
Zauważ, że w tym przypadku będziesz musiał użyć dodatkowego jawnego rzutowania, aby otrzymać obj jako łańcuch.
Słowo kluczowe as jest używane do rzutowania typów dopuszczających wartość null. Jeśli określona wartość nie jest wystąpieniem określonego typu, zwracana jest wartość null. Na przykład:
Operator „as” również nie zgłosi wyjątku, po prostu zwróci wartość null.
Pinte Dani
Poprawiono literówkę dotyczącą „jest” i „jako”
Patrick Peters
2
Operator Is, rzut, zwraca wartość true, jeśli się powiedzie. Zwraca false, jeśli rzutowanie się nie powiedzie. Dzięki niemu nie możesz przechwycić przekonwertowanej zmiennej. Ten operator jest najbardziej przydatny podczas sprawdzania typów w instrukcjach if i wyrażeniach. Is-cast jest idealny tylko wtedy, gdy zmienna wynikowa nie będzie potrzebna do dalszego użycia
Jak obsada. Dzięki niemu zyskujemy wydajność i unikamy wyjątków, gdy rzut jest nieprawidłowy. Null jest zwracane, gdy rzucanie jest niemożliwe. W przypadku typów referencyjnych zaleca się rzutowanie w postaci. Jest szybki i bezpieczny - możemy przetestować wynikową zmienną pod kątem wartości null, a następnie jej użyć. Eliminuje to dodatkowe rzuty
is OPERATOR
Operator is w C # służy do sprawdzania typu obiektu i zwraca wartość bool: true, jeśli obiekt jest tego samego typu i false, jeśli nie. lub także Operator „is” służy do sprawdzania, czy wykonywany typ obiektu jest zgodny z danym typem, czy nie. Dla obiektów null zwraca false, np
if(obj isAnimalObject){//Then Work}
jako OPERATOR
Operator as wykonuje to samo zadanie co operator is, ale różnica polega na tym, że zamiast typu bool zwraca obiekt, jeśli są one zgodne z tym typem, w przeciwnym razie zwraca wartość null.W innych słowach operator `` as '' służy do wykonywania konwersji między zgodnymi rodzaje.
na przykład
Type obj =ObjectasType;
Zalety as over is
W przypadku operatora is, aby wpisać rzutowanie, musimy wykonać dwa kroki:
Check the Type using isIf it’s true then Type cast
W rzeczywistości wpływa to na wydajność, ponieważ za każdym razem środowisko CLR przejdzie przez hierarchię dziedziczenia, sprawdzając każdy typ podstawowy pod kątem określonego typu.
Aby tego uniknąć, użyj as, zrobi to w jednym kroku. Tylko do sprawdzenia typu używamy operatora is.
Twoja odpowiedź jest prawidłowa, ale Twój przykładowy kod jest anty-wzorcem. Jest to kosztowne zrobić iswtedy as: to unboxes dwukrotnie. W przypadku typów referencyjnych należy po prostu to zrobić as, a następnie sprawdzić, czy nie ma wartości null, aby zobaczyć, czy zadziałało.
Steven Sudit
1
Spójrz na poniższy film z YouTube, który wyjaśnia różnicę w bardziej demonstracyjny i wizualny sposób: -
Poniżej znajduje się długa odpowiedź z objaśnieniem kodu.
Słowo kluczowe „IS” jest przydatne do sprawdzania, czy obiekty są zgodne z typem. Na przykład w poniższym kodzie sprawdzamy, czy obiekt „ocust” jest typem klasy „Customer”.
object ocust =newCustomer();if(ocust isCustomer){
Słowo kluczowe „JAK” pomaga w konwersji z jednego typu na inny. Na przykład w poniższym kodzie konwertujemy obiekt na typ danych string. Jeśli słowo kluczowe „AS” nie może wpisać typu rzutowania, zwraca NULL.
Zarówno IS, jak i AS są używane do bezpiecznego odlewania typu
IS Keyword -> sprawdza, czy typ danego obiektu jest zgodny z nowym typem obiektu. To nigdy nie zgłasza wyjątku. To jest typ boolowski… zwraca prawdę lub fałsz
`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.`
AS Keyword: sprawdza, czy typ danego obiektu jest zgodny z nowym typem obiektu. Zwraca wartość różną od null, jeśli dany obiekt jest zgodny z nowym, w przeciwnym razie null .. To zgłasza wyjątek.
`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`
Oba operatory są używane do bezpiecznego odlewania typu.
Operator AS:
Operator AS sprawdza również, czy typ danego obiektu jest zgodny z nowym typem obiektu. To słowo kluczowe sprawdzi, czy typ danego obiektu jest zgodny z nowym typem obiektu. Jeśli nie jest kompatybilny z nowym, zwróci NULL.
Operator IS:
Ten operator sprawdza, czy typ obiektu jest zgodny z nowym obiektem. Jeśli jest zgodny, zwraca true, w przeciwnym razie false.
Odpowiedzi:
jest
W
is
operator sprawdza, czy obiekt może być oddane do określonego typu.Przykład:
tak jak
Do
as
operatora próby do oddania obiektu do określonego rodzaju i zwraca NULL jeśli to się nie powiedzie.Przykład:
Powiązane również:
Odlew
Do napędu odlew próby do oddania obiektu do określonego rodzaju i zgłasza exeption jeśli to się nie powiedzie.
Przykład:
źródło
is
nie sprawdza, czy obiekt może być rzutowany na określony typ. Liczba całkowita rzutuje na długą grzywnę, ale10 is long
jest fałszywa.(long)some_integer
się nie powiedzie? Jestem prawie pewien, że oboje wiemy, że to nieprawda, nawet jeśli go nie uruchomiliśmy, więc wyjaśnij, co masz na myśli.is
: „ Pamiętaj, że operator is bierze pod uwagę tylko konwersje referencyjne, konwersje typu boxing i konwersje po rozpakowaniu. Inne konwersje, takie jak konwersje zdefiniowane przez użytkownika, nie są brane pod uwagę. ” (Msdn.microsoft.com/en-us/library/scekt9xw .aspx). Informacjeas
: „ Zauważ, że operator as wykonuje tylko konwersje odwołań, konwersje dopuszczające wartość null i konwersje typu boxing. Operator as nie może wykonywać innych konwersji, takich jak konwersje zdefiniowane przez użytkownika, które zamiast tego powinny być wykonywane przy użyciu wyrażeń rzutowania. ” ( Msdn .microsoft.com / en-us / library / cscsdfbt.aspx )Różnica między IS i A jest taka ...
IS - Is Operator służy do sprawdzania zgodności obiektu z danym typem i zwraca wynik jako wartość logiczną (prawda lub fałsz).
AS - As Operator służy do rzutowania obiektu na dany typ lub klasę.
Dawny.
jest równa:
źródło
is
można wyrazić za pomocąas
ias
można wyrazić za pomocąis
. Oto jak zrobićis
zeas
słowem kluczowym.Bool b = obj is Student;
jest odpowiednikiem:Bool b = (obj as Student) != null;
Więcej na ten temat tutajOba
is
ias
słowa kluczowe są używane do rzutowania typów w C #.Kiedy spojrzysz na kod IL użycia obu słów kluczowych, łatwo zauważysz różnicę.
Kod C #:
Kod IL (dla powyższego kodu C # znajduje się na załączonym obrazku):
Kod IL do
is
użycia słowa kluczowego zawiera instrukcje IL zarównoisinsta
icastclass
.Ale kod IL do
as
użycia słów kluczowych ma tylkoisinsta
.W wyżej wymienionym użyciu, dwa typy będą miały miejsce, gdy
is
używane jest słowo kluczowe, i tylko jedno typowanie, gdyas
używane jest słowo kluczowe.Uwaga: Jeśli używasz
is
słowa kluczowego do sprawdzenia jakiegoś warunku i nie interesuje cię wynik rzutowania, to będzie tylko jedno rzutowanie, tj.is
aas
słowa kluczowe będą używane w zależności od konieczności.źródło
Słowo kluczowe is sprawdza, czy wartość po jego lewej stronie jest wystąpieniem typu po prawej stronie. Na przykład:
Zauważ, że w tym przypadku będziesz musiał użyć dodatkowego jawnego rzutowania, aby otrzymać obj jako łańcuch.
Słowo kluczowe as jest używane do rzutowania typów dopuszczających wartość null. Jeśli określona wartość nie jest wystąpieniem określonego typu, zwracana jest wartość null. Na przykład:
źródło
Powiedziałbym: czytaj MSDN online, ale oto jest:
Operator is sprawdza, czy obiekt jest zgodny z danym typem, a wynikiem oceny jest wartość logiczna: prawda lub fałsz.
Operator as nigdy nie zgłosi wyjątku.
źródło
Operator Is, rzut, zwraca wartość true, jeśli się powiedzie. Zwraca false, jeśli rzutowanie się nie powiedzie. Dzięki niemu nie możesz przechwycić przekonwertowanej zmiennej. Ten operator jest najbardziej przydatny podczas sprawdzania typów w instrukcjach if i wyrażeniach. Is-cast jest idealny tylko wtedy, gdy zmienna wynikowa nie będzie potrzebna do dalszego użycia
Jak obsada. Dzięki niemu zyskujemy wydajność i unikamy wyjątków, gdy rzut jest nieprawidłowy. Null jest zwracane, gdy rzucanie jest niemożliwe. W przypadku typów referencyjnych zaleca się rzutowanie w postaci. Jest szybki i bezpieczny - możemy przetestować wynikową zmienną pod kątem wartości null, a następnie jej użyć. Eliminuje to dodatkowe rzuty
źródło
źródło
is OPERATOR Operator is w C # służy do sprawdzania typu obiektu i zwraca wartość bool: true, jeśli obiekt jest tego samego typu i false, jeśli nie. lub także Operator „is” służy do sprawdzania, czy wykonywany typ obiektu jest zgodny z danym typem, czy nie. Dla obiektów null zwraca false, np
jako OPERATOR
Operator as wykonuje to samo zadanie co operator is, ale różnica polega na tym, że zamiast typu bool zwraca obiekt, jeśli są one zgodne z tym typem, w przeciwnym razie zwraca wartość null.W innych słowach operator `` as '' służy do wykonywania konwersji między zgodnymi rodzaje.
na przykład
Zalety as over is W przypadku operatora is, aby wpisać rzutowanie, musimy wykonać dwa kroki:
W rzeczywistości wpływa to na wydajność, ponieważ za każdym razem środowisko CLR przejdzie przez hierarchię dziedziczenia, sprawdzając każdy typ podstawowy pod kątem określonego typu.
Aby tego uniknąć, użyj as, zrobi to w jednym kroku. Tylko do sprawdzenia typu używamy operatora is.
źródło
Operator As jest podobny do rzutowania, ale zwraca wartość null zamiast wyjątku, jeśli się nie powiedzie.
Operator Is służy do sprawdzania, czy jeden obiekt jest zgodny z określonym typem. Zwykle jest używany w instrukcjach If.
źródło
is
: Operator is służy do sprawdzania, czy typ wykonawczy obiektu jest zgodny z danym typemas
: Operator as jest używany do wykonywania konwersji między zgodnymi typami.źródło
is
wtedyas
: to unboxes dwukrotnie. W przypadku typów referencyjnych należy po prostu to zrobićas
, a następnie sprawdzić, czy nie ma wartości null, aby zobaczyć, czy zadziałało.Spójrz na poniższy film z YouTube, który wyjaśnia różnicę w bardziej demonstracyjny i wizualny sposób: -
https://www.youtube.com/watch?v=IKmRtJcRX_I
Poniżej znajduje się długa odpowiedź z objaśnieniem kodu.
Słowo kluczowe „IS” jest przydatne do sprawdzania, czy obiekty są zgodne z typem. Na przykład w poniższym kodzie sprawdzamy, czy obiekt „ocust” jest typem klasy „Customer”.
Słowo kluczowe „JAK” pomaga w konwersji z jednego typu na inny. Na przykład w poniższym kodzie konwertujemy obiekt na typ danych string. Jeśli słowo kluczowe „AS” nie może wpisać typu rzutowania, zwraca NULL.
źródło
vs
Drugi zwróci wartość null, jeśli obj nie jest MyClass, zamiast zgłosić wyjątek rzutowania klasy.
funkcja zwróci tylko wartość true lub false
źródło
Zarówno IS, jak i AS są używane do bezpiecznego odlewania typu
IS Keyword -> sprawdza, czy typ danego obiektu jest zgodny z nowym typem obiektu. To nigdy nie zgłasza wyjątku. To jest typ boolowski… zwraca prawdę lub fałsz
AS Keyword: sprawdza, czy typ danego obiektu jest zgodny z nowym typem obiektu. Zwraca wartość różną od null, jeśli dany obiekt jest zgodny z nowym, w przeciwnym razie null .. To zgłasza wyjątek.
źródło
Oba operatory są używane do bezpiecznego odlewania typu.
Operator AS:
Operator AS sprawdza również, czy typ danego obiektu jest zgodny z nowym typem obiektu. To słowo kluczowe sprawdzi, czy typ danego obiektu jest zgodny z nowym typem obiektu. Jeśli nie jest kompatybilny z nowym, zwróci NULL.
Operator IS:
Ten operator sprawdza, czy typ obiektu jest zgodny z nowym obiektem. Jeśli jest zgodny, zwraca true, w przeciwnym razie false.
źródło