Guf*_*ffa 144
的is操作者检查是否一个对象可以被转换为特定的类型.
例:
if (someObject is StringBuilder) ...
Run Code Online (Sandbox Code Playgroud)
该as运营商试图将对象强制转换为特定类型,如果失败则返回null.
例:
StringBuilder b = someObject as StringBuilder;
if (b != null) ...
Run Code Online (Sandbox Code Playgroud)
还有关系:
在铸造操作者试图将对象强制转换到特定的类型,并且如果失败抛出exeption.
例:
StringBuilder b = (StringBuilder)someObject.
Run Code Online (Sandbox Code Playgroud)
小智 30
IS和As的区别在于......
IS - Is运算符用于检查具有给定类型的对象的兼容性,并将结果返回为布尔值(True或False).
AS - As运算符用于将对象转换为给定类型或类.
防爆.
Student s = obj as Student;
Run Code Online (Sandbox Code Playgroud)
相当于:
Student s = obj is Student ? (Student)obj : (Student)null;
Run Code Online (Sandbox Code Playgroud)
is关键字检查左侧的值是否是右侧类型的实例.例如:
if(obj is string)
{
...
}
Run Code Online (Sandbox Code Playgroud)
请注意,在这种情况下,您必须使用额外的显式强制转换来将obj作为字符串.
as关键字用于转换可空类型.如果指定的值不是指定类型的实例,则返回null.例如:
string str = obj as string;
if(str != null)
{
...
}
Run Code Online (Sandbox Code Playgroud)
小智 6
"是"和"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
}
Run Code Online (Sandbox Code Playgroud)
以上C#代码的IL代码在附图中 输入图像描述
关键字用法的IL代码包含IL指令,包括isinsta和castclass.但是作为关键字使用的IL代码只有isinsta.
在上面提到的用法中,将使用两次类型转换,其中使用关键字,并且仅使用关键字一次.
注意:如果您使用'is'关键字检查某些条件,对类型结果没有任何兴趣,那么此处也只会出现类型种姓.即
if (baseclassInstance is DerivedClass)
{
// do something based on the condition check.
}
Run Code Online (Sandbox Code Playgroud)
'is'和'as'将根据需要使用关键字.