[英]Cast uint -> double invalid?
在一些库我创建我必须使用以下演员:
public void Foo(IList<uint> uintsList) // I need to use uint in the interface for this method
{
List<double> doublesList = uintsList.Cast<double>().ToList();
// Do something with the doublesList
}
我假设施放uint
- > double
应该始终有效,并且在我的测试期间它始终工作正常。
但是在使用此方法的应用程序中发生了InvalidCastException
。 很遗憾,我无法访问此应用程序。 所以这是我的问题:
编辑
当然,在转换之前我总是执行检查以避免uintsList
为null或为空时的情况
编辑2好了,问题解决了,我使用ConvertAll
方法更改了演员,但我仍然不明白它是如何发生的?
所以这个问题仍困扰着我: 代码的相同部分如何在我的计算机上正常运行,并在另一部分抛出异常? 不同的编译器/环境版本? 一些具体的设置? 任何人都可以告诉我,我应该在哪里寻找这种情况的原因,以避免将来出现这种情况?
.Cast
方法并不意味着执行类似的转换。 它只是在继承层次结构中执行转换。
此行为的原因是扩展方法签名采用IEnumerable
而不是IEnumerable<T>
。 因此,获取枚举器的Current
属性会将object
返回到Cast
方法。 当然,您不能直接将一种类型的值类型拆分为另一种类型。 基本上, Cast
会做类似的事情:
int i = 42;
object o = i;
double d = (double)o; // fails.
请参阅: C#将List <int>转换为List <double>
转换uint
- > double
是有效的,但是您将一个uint
列表转换为双精度列表。 在大多数体系结构中,列表的大小甚至不同(以字节为单位) - 您需要创建一个全新的列表并单独转换每个元素。 我会使用ConvertAll
:
List<double> doublesList = uintsList.ConvertAll(x => (double)x);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.