代码之家  ›  专栏  ›  技术社区  ›  scope_creep

C#中“is”关键字的使用模式

  •  6
  • scope_creep  · 技术社区  · 16 年前

    5 回复  |  直到 16 年前
        1
  •  14
  •   JaredPar    16 年前

    关键字“is”可用于确定对象是否可以通过引用、装箱或拆箱转换转换转换为类型(C#lang规范7.9.10)。它类似于“as”,除了它实际上并不进行转换,只是在可能的情况下返回。

    if ( o is SomeType ) {
      TakeSomeAction();
    }
    

    如果使用指定类型的值引用是有用的,那么使用“as”运算符会更有效。

    // Wrong
    if ( o is SomeType ) {
      SomeType st = (SomeType)o;
      st.TakeSomeAction();
    }
    
    // Right
    SomeType st = o as SomeType;
    if ( st != null ) {
      st.TakeSomeAction();
    }
    
        2
  •  6
  •   Thomas Levesque    16 年前

    实际上,我几乎从不使用它。当我需要它时,通常是因为我无论如何都要将值转换为所需的类型,所以我更喜欢使用as。

    if (x is MyType)
    {
        MyType y = (MyType)x;
        ...
    }
    

    以及:

    MyType y = x as MyType;
    if (y != null)
    {
        ...
    }
    

    在第二种情况下:1次操作(类型检查+一次性铸造)

        3
  •  1
  •   Stefan Steinegger    16 年前

    is

    所以我通常直接用 as

        4
  •  0
  •   Rune FS    16 年前

    void somemethod(dynamic o)
    {
    DoStuff(o);
    }
    
    DoStuff(neededType o){}
    DoStuff(object o){}
    

    然而,这可能会对性能产生影响,但有助于提高可读性

        5
  •  0
  •   Brett Ryan    16 年前

    is 给定类型的类型。如果是这样,那么你应该使用`as keyworkd。

    MyObject mo = obj as MyObject;
    if (mo == null) {
        // do something.
    } else {
        // do something else.
    }
    

    这将产生一个引用,您可以测试其是否为空。否则,使用 as 不管怎样,你最终还是被要求表演演员阵容。