标签: as-keyword

为什么'''被实现为'as'?

鉴于这是一个非常自然的用例(如果你不知道as实际上是什么),

if (x is Bar) {
   Bar y = x as Bar;
   something();
}
Run Code Online (Sandbox Code Playgroud)

实际上是等效的(也就是说,编译器生成的CIL来自上面的代码将是等价的):

Bar y = x as Bar;
if (y != null) {
    y = x as Bar; //The conversion is done twice!
    something();
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我想我没有说清楚我的问题.我不会写第二个片段,因为它当然是多余的.我声称在编译第一个片段时编译器生成的CIL等同于第二个片段,这是多余的.问题:a)这是正确的吗?b)如果是这样,为什么这样is实施?

这是因为我发现第一个片段比实际写得更好更清晰,更漂亮

Bar y = x as Bar;
if (y != null) {
   something();
}
Run Code Online (Sandbox Code Playgroud)

结论:

优化is/ ascase不是编译器的责任,而是JIT的责任.

此外,与空检查它具有比这两个方案(较少(更便宜)的说明isasiscast).

附录:

与nullcheck一样的CIL(.NET 3.5):

L_0001: ldarg.1 …
Run Code Online (Sandbox Code Playgroud)

.net c# as-keyword

28
推荐指数
4
解决办法
1698
查看次数

Java中是否有与C#的'AS'关键字类似的关键字

我们知道C#提供了一个AS关键字,它自动检查Object是否属于某个类型,如果是,则将其转换为所需类型,否则返回null.

public class User

{

}

....

Object obj = someObj;

User user = obj As User;

...

在上面的示例中,An Object obj可以是User类型或其他类型.用户将获得User类型的对象或null.这是因为C#的As关键字首先执行检查,如果可能,然后执行将对象转换为结果类型.

那么Java中的任何关键字是否等同于C#的AS关键字?

c# java keyword as-keyword

19
推荐指数
3
解决办法
1万
查看次数

python的`with`语句目标是意外的无

好像我不明白 - 蟒蛇with声明.

考虑这个课程:

class test(object):
    def __enter__(self): pass
    def __exit__(self, *ignored): pass
Run Code Online (Sandbox Code Playgroud)

现在,当使用它时with,就像在

with test() as michael:
    print repr(michael)
Run Code Online (Sandbox Code Playgroud)

我希望有一些输出像<test instance at memore blah>.但是我没有.

这里有什么问题吗?任何建议都会有帮助.

(我使用的是Python 2.6.6.)

编辑:

感谢 ephement指向我的文档.该__enter__方法应阅读

    def __enter__(self): return self
Run Code Online (Sandbox Code Playgroud)

python with-statement as-keyword contextmanager

13
推荐指数
1
解决办法
4982
查看次数

有没有令人信服的理由反对使用C#关键字"as"?

我发现使用以下内容:

TreeViewItem i = sender as TreeViewItem;
if(i != null){ ... }
Run Code Online (Sandbox Code Playgroud)

比以下更容易编写和理解:

if(sender.GetType() == typeof(TreeViewItem)){
    TreeViewItem i = (TreeViewItem)sender;
    ...
}
Run Code Online (Sandbox Code Playgroud)

有没有令人信服的理由使用第一个结构?

.net c# types casting as-keyword

7
推荐指数
3
解决办法
527
查看次数

我如何使用groovy的AS关键字

这可能是重复的,但"作为"是INCREDABLY很难关键字谷歌,即便如此无视"为"作为查询的一部分.

所以我想知道如何实现一个反复支持"as"的类.对于示例类:

class X {
    private val
    public X(def v) {
        val=v
    }
    public asType(Class c) {
        if (c == Integer.class)
            return val as Integer
        if(c == String.class)
            return val as String
    }
}

这允许类似于:

new X(3) as String
Run Code Online (Sandbox Code Playgroud)

工作,但没有帮助:

3 as X
Run Code Online (Sandbox Code Playgroud)

我大概有附加/修改"asType"关于字符串和整数不知怎么的,但我觉得像这样的任何更改,应仅限于"X"级...的X类或者可以实现类似的方法:

X fromObject(object)
Run Code Online (Sandbox Code Playgroud)

或以某种方式从X中修改字符串/ Integer类这似乎艰难的,因为直到X实际上是用它不会在X执行任何代码......如果我的X第一次使用是"3为X",将X GET在Groovy尝试调用之前有机会覆盖Integer的asType吗?

groovy as-keyword

5
推荐指数
1
解决办法
3650
查看次数

使用"as"关键字会丢失对象初始化

我正在使用派生类并使用as关键字将基类强制转换为它.当我这样做时,正在调用派生类构造函数,并且它的对象已初始化,但派生实例不会以初始化对象结束(具有空值).这是一个代码示例.

// classes
public class Request
{
  public Request();
  public Header Header{get;set;}
}

public class CreateRequest : Request
{
  public Foo Foo{get;set;}
  public Bar Bar{get;set;}

  public CreateRequest():base()
  {
    this.Foo = new Foo();
    this.Bar = new Bar();
  }
}

public class SomeClass
{
  private Response ProcessCreateRequest(Request request)
  {
    // request comes from a json request
    CreateRequest createRequest = request as CreateRequest;
    // values of Foo and Bar are null
    [...]
  }
}
Run Code Online (Sandbox Code Playgroud)

是"as"通常用于派生 - >基础而不是基础 - >派生的问题还是在这里有其他工作吗?

c# as-keyword

1
推荐指数
1
解决办法
147
查看次数