違いが何であるかを教えてくださいis
とas
C#でのキーワード
違いが何であるかを教えてくださいis
とas
C#でのキーワード
回答:
is
オペレータチェックオブジェクトは、特定の型にキャストすることができる場合。
例:
if (someObject is StringBuilder) ...
as
オペレータの試みは、特定の型にオブジェクトをキャストし、それが失敗した場合はNULLを返します。
例:
StringBuilder b = someObject as StringBuilder;
if (b != null) ...
関連もあります:
キャスト演算子の特定の型にオブジェクトをキャストしようとする試み、それが失敗した場合exeptionをスローします。
例:
StringBuilder b = (StringBuilder)someObject.
is
オブジェクトが特定の型にキャストできるかどうかはチェックしません。整数は長い罰金にキャストしますが10 is long
、偽です。
(long)some_integer
は失敗しますか?それを実行することなしにそれが真実ではないことを私たち二人が知っていると確信しているので、あなたが何を意味するのか説明してください。
is
:「こと音符である。オペレータは参考変換、ボクシング変換、およびアンボクシング変換を考慮し、ユーザ定義の変換などの他の変換は、考慮されていない」(msdn.microsoft.com/en-us/library/scekt9xw .aspx)。Aboutas
: " as演算子は参照変換、null許容変換、ボクシング変換のみを実行することに注意してください。as 演算子は、ユーザー定義変換などの他の変換を実行できません。代わりにキャスト式を使用して実行する必要があります。 "(msdn .microsoft.com / en-us / library / cscsdfbt.aspx)
ISとAsの違いはそれです。
IS -Is演算子は、オブジェクトと特定のタイプの互換性をチェックするために使用され、結果をブール(TrueまたはFalse)として返します。
AS -As演算子は、オブジェクトを特定のタイプまたはクラスにキャストするために使用されます。
例
Student s = obj as Student;
以下と同等です。
Student s = obj is Student ? (Student)obj : (Student)null;
is
表すことができるas
とas
して発現させることができますis
。ここで作成する方法であるis
とas
キーワード。 Bool b = obj is Student;
:に相当し Bool b = (obj as Student) != null;
、この上の詳細ここに
is
とas
キーワードの両方がC#での型キャストに使用されます。
両方のキーワードの使用法のILコードを見ると、違いが簡単にわかります。
C#コード:
BaseClass baseclassInstance = new DerivedClass();
DerivedClass derivedclassInstance;
if (baseclassInstance is DerivedClass)
{
derivedclassInstance = (DerivedClass)baseclassInstance;
// do something on derivedclassInstance
}
derivedclassInstance = baseclassInstance as DerivedClass;
if (derivedclassInstance != null)
{
// do something on derivedclassInstance
}
ILコード(上記のC#コードは添付画像にあります):
is
キーワード使用法
のILコードには、isinsta
との両方のIL命令が含まれていますcastclass
。
ただし、as
キーワードの使用に関するILコードにはしかありませんisinsta
。
上記の使用法でis
は、キーワードが使用されている場合は2つのタイプキャストが発生し、キーワードが使用されている場合は1つのタイプキャストのみが発生しas
ます。
注:is
キーワードを使用していくつかの条件をチェックしていて、型キャストの結果に関心がない場合、型キャストは1つしかありません。
if (baseclassInstance is DerivedClass)
{
// do something based on the condition check.
}
is
そしてas
キーワードは、必要に基づいて使用されます。
isキーワードは、左側の値が右側の型のインスタンスであるかどうかを確認します。例えば:
if(obj is string)
{
...
}
この場合、objを文字列として取得するには、追加の明示的なキャストを使用する必要があることに注意してください。
asキーワードは、null許容型をキャストするために使用されます。指定された値が指定されたタイプのインスタンスでない場合、nullが返されます。例えば:
string str = obj as string;
if(str != null)
{
...
}
私は言うでしょう:MSDNをオンラインで読んでください、しかしここにそれがあります:
is演算子は、オブジェクトが特定のタイプと互換性があるかどうかをチェックし、評価の結果はブール値(trueまたはfalse)になります。
as演算子は例外をスローしません。
Is演算子(キャスト)は、成功するとtrueを返します。キャストが失敗した場合はfalseを返します。これを使用すると、変換された変数をキャプチャできません。この演算子は、ifステートメントと式の型をチェックする場合に最も役立ちます。is-castは、結果の変数がさらに使用する必要がない場合にのみ理想的です。
キャストのままです。これにより、パフォーマンスが向上し、キャストが無効な場合の例外が回避されます。キャストが不可能な場合はnullが返されます。参照タイプについては、as-castをお勧めします。高速かつ安全です。結果の変数をnullに対してテストしてから使用できます。これは余分なキャストを排除します
is OPERATOR C#のis演算子は、オブジェクトタイプをチェックするために使用され、ブール値を返します。オブジェクトが同じタイプの場合はtrue、そうでない場合はfalseです。または「is」演算子は、オブジェクトの実行時の型が特定の型と互換性があるかどうかを確認するために使用されます。nullオブジェクトの場合、falseを返します。
if(obj is AnimalObject)
{
//Then Work
}
オペレーターとして
as演算子はis演算子と同じ働きをしますが、違いはboolではなく、オブジェクトがその型と互換性がある場合はオブジェクトを返し、それ以外の場合はnullを返します。言い換えると、互換性のあるタイプ。
例えば
Type obj = Object as Type;
asオーバーの利点 is演算子の場合、型キャストするには、2つのステップを実行する必要があります。
Check the Type using is
If it’s true then Type cast
実際には、CLRが継承階層を通過し、指定された型に対して各基本型をチェックするため、これはパフォーマンスに影響します。
これを回避するには、asを使用します。1つのステップで実行されます。タイプをチェックする場合にのみ、is演算子を使用する必要があります。
is
:is演算子は、オブジェクトの実行時の型が特定の型と互換性があるかどうかを確認するために使用されます
as
:as演算子は、互換性のある型間の変換を実行するために使用されます。
object s = "this is a test";
string str=string.Empty;
if( s is string)
str = s as string;
is
その後as
:それは二回unboxes。参照型についてはas
、を実行し、nullをチェックして、それが機能するかどうかを確認する必要があります。
より実証的で視覚的な方法の違いを説明する以下のyoutubeビデオをご覧ください:-
https://www.youtube.com/watch?v=IKmRtJcRX_I
以下はコードの説明付きの長い回答です。
「IS」キーワードは、オブジェクトがタイプと互換性があるかどうかを確認するのに役立ちます。たとえば、次のコードでは、「ocust」オブジェクトが「Customer」クラスのタイプかどうかを確認しています。
object ocust = new Customer();
if (ocust is Customer)
{
「AS」キーワードは、あるタイプから別のタイプへの変換を行うのに役立ちます。たとえば、次のコードでは、オブジェクトを文字列データ型に変換しています。「AS」キーワードが型キャストできない場合、NULLを返します。
object o = "somestring";
string str = o as string;
ISキーワード->指定されたオブジェクトのタイプが新しいオブジェクトタイプと互換性があるかどうかをチェックします。それは例外をスローしません。これはブール型です。trueまたはfalseを返します。
`student stud = new student(){}
if(stud is student){} // It returns true // let say boys as derived class
if(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キーワード:指定されたオブジェクトのタイプが新しいオブジェクトタイプと互換性があるかどうかをチェックします。指定されたオブジェクトが新しいオブジェクトと互換性がある場合はnull以外を返し、それ以外の場合はnullを返します。これにより例外がスローされます。
`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`
どちらの演算子も安全な型キャストに使用されます。
ASオペレーター:
ASオペレーターは、指定されたオブジェクトのタイプが新しいオブジェクトタイプと互換性があるかどうかもチェックします。このキーワードは、指定されたオブジェクトのタイプが新しいオブジェクトタイプと互換性があるかどうかをチェックします。新しいものと互換性がない場合は、NULLを返します。
ISオペレーター:
このオペレーターは、オブジェクトのタイプが新しいオブジェクトと互換性があるかどうかをチェックします。互換性がある場合はtrue、それ以外の場合はfalseを返します。