首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C#中使用as关键字对泛型类型的编译时行为冲突

在C#中使用as关键字对泛型类型的编译时行为冲突
EN

Stack Overflow用户
提问于 2015-01-26 20:14:29
回答 1查看 433关注 0票数 18

当试图对不能强制转换为的非泛型类型使用C# "as“关键字时,编译器会给出一个无法转换该类型的错误。

但是,当对泛型类型使用"as“关键字时,编译器不会给出错误:

代码语言:javascript
复制
public class Foo { }

public class Bar<T> { }

public class Usage<T> {
   public void Test() {
      EventArgs args = new EventArgs();
      var foo = args as Foo;     // Compiler Error: cannot convert type
      var bar = args as Bar<T>;  // No compiler error
   }
}

我在一个更大的代码库中发现了这种行为,其中缺少编译时错误导致了运行时的问题。

这种相互冲突的行为是故意的吗?如果是这样的话,有没有人知道为什么?

EN

回答 1

Stack Overflow用户

发布于 2015-01-26 20:18:33

请注意,as运算符仅执行引用转换、可空转换和装箱转换。as运算符不能执行其他转换,如用户定义的转换,这些转换应改为使用强制转换表达式来执行。

https://msdn.microsoft.com/en-us/library/cscsdfbt.aspx

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28149927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档