我有一个类型,其中包含对大多数基类型的隐式转换运算符,并尝试.Cast<string>()在此类型的集合上使用,该集合失败.当我深入研究它时,我注意到cast via as不使用隐式或显式转换,只是不会编译,所以我猜这就是.Cast跌倒的地方.所以这失败了
var enumerable = source.Cast<string>();
Run Code Online (Sandbox Code Playgroud)
但这很有效
var enumerable = source.Select(x => (string)x);
Run Code Online (Sandbox Code Playgroud)
那么Cast有什么好处?当然,这是几个字符较短,但似乎更有限.如果它可以用于转换,除了更紧凑的语法之外还有一些好处吗?
假设我有一个IEnumerable<int>,我希望将它们转换为ASCII等效字符.
对于一个整数,它只是(char)i,所以总是collection.Select(i => (char)i),但我认为这将是一个有点清洁使用collection.Cast().
任何人都可以解释为什么我InvalidCastException在使用时得到的collection.Cast<char>()却没有collection.Select(i => (char)i)?
编辑:有趣的是,当我打电话时,collection.OfType<char>()我得到一个空集.