对通用枚举集合应用Cast <int> .Cast <int?>会导致无效的强制转换异常

纳瓦尔
enum Gender { Male, Female }

var k = new[] { Gender.Male }.Cast<int>().ToList().Cast<int?>().ToList(); //alright

var p = new[] { Gender.Male }.Cast<int>().Cast<int?>().ToList(); //InvalidCastException

第二种情况是什么原因?我知道我不能直接将盒装转换enumint?,但是我进行两阶段的转换,即Cast<int>.Cast<int?>应该可以正常工作。

编辑:

考虑到以下工作,这是令人惊讶的:

object o = Gender.Male;
int i = (int)o; // so here the cast is not to an entirely different type, which works
纳瓦尔

好吧,我来找出原因,这仍然很奇怪。我应该Cast<T>首先自己检查实施情况!

这是如何Cast<T>实现的:

public static IEnumerable<TResult> Cast<TResult>(this IEnumerable source)
{
    IEnumerable<TResult> enumerable = source as IEnumerable<TResult>;
    if (enumerable != null)
    {
        return enumerable; // this is the culprit..
    }
    if (source == null)
    {
        throw Error.ArgumentNull("source");
    }
    return Enumerable.CastIterator<TResult>(source);
}

private static IEnumerable<TResult> CastIterator<TResult>(IEnumerable source)
{
    foreach (object current in source)
    {
        yield return (TResult)((object)current);
    }
    yield break;
}

现在问题出在第一个 Cast<int>电话上:

new[] { Gender.Male }.Cast<int>()

此处通用方法source as IEnumerable<TResult>中的sourceisnew[] { Gender.Male }TResultis返回一个非null值(这基本上意味着(在通用上下文中是一个)),因此它返回了相同的可枚举值back ,并且在下一次调用中执行了实际的强制转换,是哪个失败。至于为什么会发生这种情况在一般的情况下,抓住它在这个问题上int new[] { Gender.Male }IEnumerable<int>Gender[]Cast<int?>Genderint?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Cast float to int, or int to float?

来自分类Dev

static_cast int 引用int?

来自分类Dev

How to cast JSONArray to int array?

来自分类Dev

int to char cast,奇怪的行为

来自分类Dev

boost :: lexical_cast <int>(“ -138.8468953457983248”)引发异常

来自分类Dev

boost :: lexical_cast <int>(“ -138.8468953457983248”)引发异常

来自分类Dev

无法使用static_cast将枚举类转换为int

来自分类Dev

为什么reinterpret_cast无法将int转换为int?

来自分类Dev

为什么在C ++中不允许将static_cast从int(*)(int)转换为void *?

来自分类Dev

将字符串数据插入varchar列会导致无效的强制转换为int

来自分类Dev

SQL强制转换为CHAR的SQL cast()INT在UPDATE查询中不起作用

来自分类Dev

dynamic_cast(int *到int *)-编译错误

来自分类Dev

How to cast Int to unsigned short in Swift

来自分类Dev

具有Int Cast的PDO准备的语句

来自分类Dev

使用static_cast将字符串转换为int并将int转换为字符串

来自分类Dev

什么时候强制转换为int会导致问题?

来自分类Dev

为什么将MS SQL CAST作为bigint导致int溢出?

来自分类Dev

尝试转换SQL int时无效的强制转换异常-> C#int?

来自分类Dev

尝试转换SQL int时无效的强制转换异常-> C#int?

来自分类Dev

将CAST / CONVERT数据类型转换为INT SQL Server查询

来自分类Dev

将float转换为int隐式vs显式(cast)差异

来自分类Dev

如何在引用int和作用域枚举之间进行static_cast?

来自分类Dev

Why does this function cast an int argument to a volatile pointer and immediately dereferences it?

来自分类Dev

为什么对volatile int的const引用需要static_cast?

来自分类Dev

How to make compiler not show int to void pointer cast warnings

来自分类Dev

带有INT和单个连字符(-)的奇怪CAST行为

来自分类Dev

带有INT和单个连字符(-)的奇怪CAST行为

来自分类Dev

Firebase iOS -Cast StorageUploadTask 进度从 Double 到 Int

来自分类Dev

如何使用 SQLite 和 cast as int 更新查询

Related 相关文章

  1. 1

    Cast float to int, or int to float?

  2. 2

    static_cast int 引用int?

  3. 3

    How to cast JSONArray to int array?

  4. 4

    int to char cast,奇怪的行为

  5. 5

    boost :: lexical_cast <int>(“ -138.8468953457983248”)引发异常

  6. 6

    boost :: lexical_cast <int>(“ -138.8468953457983248”)引发异常

  7. 7

    无法使用static_cast将枚举类转换为int

  8. 8

    为什么reinterpret_cast无法将int转换为int?

  9. 9

    为什么在C ++中不允许将static_cast从int(*)(int)转换为void *?

  10. 10

    将字符串数据插入varchar列会导致无效的强制转换为int

  11. 11

    SQL强制转换为CHAR的SQL cast()INT在UPDATE查询中不起作用

  12. 12

    dynamic_cast(int *到int *)-编译错误

  13. 13

    How to cast Int to unsigned short in Swift

  14. 14

    具有Int Cast的PDO准备的语句

  15. 15

    使用static_cast将字符串转换为int并将int转换为字符串

  16. 16

    什么时候强制转换为int会导致问题?

  17. 17

    为什么将MS SQL CAST作为bigint导致int溢出?

  18. 18

    尝试转换SQL int时无效的强制转换异常-> C#int?

  19. 19

    尝试转换SQL int时无效的强制转换异常-> C#int?

  20. 20

    将CAST / CONVERT数据类型转换为INT SQL Server查询

  21. 21

    将float转换为int隐式vs显式(cast)差异

  22. 22

    如何在引用int和作用域枚举之间进行static_cast?

  23. 23

    Why does this function cast an int argument to a volatile pointer and immediately dereferences it?

  24. 24

    为什么对volatile int的const引用需要static_cast?

  25. 25

    How to make compiler not show int to void pointer cast warnings

  26. 26

    带有INT和单个连字符(-)的奇怪CAST行为

  27. 27

    带有INT和单个连字符(-)的奇怪CAST行为

  28. 28

    Firebase iOS -Cast StorageUploadTask 进度从 Double 到 Int

  29. 29

    如何使用 SQLite 和 cast as int 更新查询

热门标签

归档