繁体   English   中英

施放uint - >双无效?

[英]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 很遗憾,我无法访问此应用程序。 所以这是我的问题:

  • 可能导致此异常的原因是什么? 铸造uint-> double是否始终有效?
  • 如何保护我的算法以避免此异常?

编辑
当然,在转换之前我总是执行检查以避免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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM