c# – 枚举[]是IEnumerable在通用方法中返回true

栏目: C# · 发布时间: 6年前

内容简介:代码日志版权声明:翻译自:http://stackoverflow.com/questions/20292988/enum-is-ienumerableint-returns-true-in-a-generic-method
这是对这个问题的跟进: Cast<int>.Cast<int?> applied on generic enum collection results in invalid cast exception
enum Gender { Male, Female }

Gender g = Gender.Male;

bool b = g is int; // false, alright no issues
b = new[] { g } is IEnumerable<int>; // false, alright no issues
b = Is<Gender, int>(g); //false, alright no issues
b = Is<Gender[], IEnumerable<int>>(new[] { g }); // true, why on earth !!!

static bool Is<S, T>(S s)
{
    return s is T;
}

为什么Gender []是IEnumerable<int>在通用情况下返回true?特别是当它们不兼容?

IEnumerable<int> c = new[] { Gender.Male }; //not compilable

在我链接的问题中,我已经绊倒了我!我认为这个问题是相关问题的关键.

对于有兴趣的人来说,这是数组的一个角落(不是真的枚举).关注 Eric Lippert’s blog 文章在答案中了解更多这种边缘案例.列表<T>不会发生这种情况例如:

b = Is<List<Gender>, IEnumerable<int>>(new List<Gender> { g }); // false, rightly
我认为这是C#定义与CLI的isinst定义不同的情况之一,当检查数组赋值兼容性时,它明确地将枚举作为基础类型. (Eric Lippert写了一篇 blog post

,解释了为什么uint []被CLI处理为int []而不是C#;我怀疑这里也是同样的解释).你甚至不需要泛型来证明:

Gender g = Gender.Male;
Console.WriteLine(new[] { g } is IEnumerable<int>); // False
Console.WriteLine((object)new[] { g } is IEnumerable<int>); // True

第一个是在编译时将表达式优化为false,因为C#编译器“知道”Gender []不是IEnumerable<int>.第二个是表达式生成在运行时评估的isinst指令.引用Eric Lippert:

It is unfortunate that C# and the CLI specifications disagree on this minor point but we are willing to live with the inconsistency.

代码日志版权声明:

翻译自:http://stackoverflow.com/questions/20292988/enum-is-ienumerableint-returns-true-in-a-generic-method


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Host Your Web Site In The Cloud

Host Your Web Site In The Cloud

Jeff Barr / SitePoint / 2010-9-28 / USD 39.95

Host Your Web Site On The Cloud is the OFFICIAL step-by-step guide to this revolutionary approach to hosting and managing your websites and applications, authored by Amazon's very own Jeffrey Barr. "H......一起来看看 《Host Your Web Site In The Cloud》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

SHA 加密
SHA 加密

SHA 加密工具

html转js在线工具
html转js在线工具

html转js在线工具