是和作为关键字之间的区别

请告诉C#中isas关键字有何区别

is运算符检查对象是否可以转换为特定的types。

例:

 if (someObject is StringBuilder) ... 

as运算符试图将对象转换为特定的types,如果失败则返回null。

例:

 StringBuilder b = someObject as StringBuilder; if (b != null) ... 

还相关:

铸件

转换运算符试图将对象转换为特定的types,如果失败则抛出一个exception。

例:

 StringBuilder b = (StringBuilder)someObject. 

ISAs的区别是..

IS – 操作符用于检查某个对象与给定types的兼容性,并将结果作为布尔值(True或False)返回。

AS – 作为运算符用于将对象投射到给定的types或类。

防爆。

  Student s = obj as Student; is equivalent to: Student s = obj is Student ? (Student)obj : (Student)null; 

is关键字检查其左侧的值是否是右侧的types的实例。 例如:

 if(obj is string) { ... } 

请注意,在这种情况下,您将不得不使用额外的显式强制转换来获取obj作为string。

as关键字用于投射可空types。 如果指定的值不是指定types的实例,则返回null。 例如:

 string str = obj as string; if(str != null) { ... } 

“是”和“as”关键字用于C#中的types转换。

当你看看这两个关键字的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 } 

上面的C#代码的IL代码是在附加的图像enter image description here

用于关键字使用的IL代码包含isinstacastclass的 IL指令。 但IL代码为关键字使用只有isinsta

在上述用法中,在使用关键字的地方会发生两次types转换,而在使用as关键字的地方只会发生一次types转换。

注意:如果使用“is”关键字来检查某个条件,对type种类结果没有任何兴趣,那么这里也只有一次types种姓会发生。 即

 if (baseclassInstance is DerivedClass) { // do something based on the condition check. } 

根据需要使用“是”和“as”关键字。

我会说:在线阅读MSDN,但这里是:

is运算符检查对象是否与给定types兼容,并且评估的结果是布尔值:true或false。

is运算符永远不会抛出exception。

As运算符类似于强制转换,但如果失败,则返回null而不是exception。

Is运算符用于检查一个对象是否与某种types兼容。 它通常用于If语句。

is :is运算符用于检查对象的运行时types是否与给定types兼容

as :as运算符用于执行兼容types之间的转换。

 object s = "this is a test"; string str=string.Empty; if( s is string) str = s as string; 

看看下面的YouTubevideo,以更具说明性和视觉化的方式解释差异:

https://www.youtube.com/watch?v=IKmRtJcRX_I

下面用代码说明去长答案。

“IS”关键字对于检查对象是否与types兼容很有用。 例如在下面的代码中,我们正在检查“ocust”对象是否是一种“Customer”类。

 object ocust = new Customer(); if (ocust is Customer) { 

“AS”关键字有助于从一种types转换为其他types。 例如在下面的代码中,我们将对象转换为string数据types。 如果“AS”关键字不能input,则返回NULL。

 object o = "somestring"; string str = o as string; 

两个操作员都用于安全types铸造。

AS运营商:

AS运算符还检查给定对象的types是否与新的对象types兼容。 此关键字将检查给定对象的types是否与新对象types兼容。 如果它与新的不兼容,那么它将返回NULL。

IS运营商:

该操作员将检查对象的天气types是否与新对象兼容。 如果兼容,则返回true,否则返回false。

如果运算符成功,则返回true。 如果转换失败,则返回false。 有了它,你不能捕获转换的variables。 这个操作符在检查if语句和expression式中的types时是非常有用的。只有当结果variables不需要进一步使用时,is-cast才是理想的

作为一个演员。 有了它,我们获得了表演,并避免了剧组失效时的例外情况。 无法投射时返回空值。 对于参考types,推荐使用铸态。 它既快速又安全。我们可以根据null来testing结果variables,然后使用它。 这消除了额外的演员

  1. 是运算符检查对象是否与给定types兼容的结果是基于true还是false。
  2. 用于将一种types转换为另一种types,并且转换失败结果为null,除非引发exception。 以及更好的理解链接的例子https://blogs.msdn.microsoft.com/prakasht/2013/04/23/difference-between-direct-casting-is-and-as-operator-in-c/
 MyClass myObject = (MyClass) obj; 

VS

 MyClass myObject = obj as MyClass; 

如果obj不是MyClass,则第二个将返回null,而不是抛出类转换exception。

是只会返回真或假

IS和AS都用于安全型铸造

IS关键字 – >检查给定对象的types是否与新的对象types兼容。 永远不会抛出exception。 这是一个布尔types..返回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关键字:检查给定对象的types是否与新的对象types兼容。 如果给定对象与新对象兼容,则返回非null,否则返回null。这将引发exception。

 `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` 

“is”是用于types之间的平等检查,返回一个bool值,而“as”用于types转换,如果转换无效而不是exception,则返回null