通用方法-类型不能用作类型参数

方红衣主教

给定以下通用方法:

    /// <summary>
    /// Performs a MoveNext on the IEnumerator 'Enoomerator'. 
    /// If it hits the end of the enumerable list, it resets to the beginning.
    /// </summary>
    /// <returns>If False, MoveNext has failed even after resetting,
    /// which means there are no entries in the list.</returns>
    private static bool CyclicalSafeMoveNext<T>(T Enoomerator) 
                                           where T : IEnumerator<T> 
    {
        if (Enoomerator.MoveNext()) //  successfully moved to the next element
        {
            return true;
        }
        else
        {
            // Either reached last element (so reset to beginning) or
            // trying to enumerate in a list with no entries 
            LogLine("CyclicalSafeMoveNext: failed a MoveNext, resetting.");
            Enoomerator.Reset();

            if (!Enoomerator.MoveNext())
            {
                // Still at end. Zero entries in the list?
                LogLine("CyclicalSafeMoveNext: failed a MoveNext after 
                Reset(), which means there were no entries in the list.");
                return false;
            }
            else
            {
                // Resetting was successful
                return true;
            }
        }
    }

当我编译这段代码

IEnumerator<FileInfo> FileInfoEnumerator files;                               
while (CyclicalSafeMoveNext(files))
{
    return files.Current.FullName;
}

我得到错误:

Error 7 The type 'System.Collections.Generic.IEnumerator<System.IO.FileInfo>' cannot 
be used as type parameter 'T' in the generic type or method
'CyclicalSafeMoveNext<T>(T)'. There is no implicit reference conversion from
'System.Collections.Generic.IEnumerator<System.IO.FileInfo>' to 'System.Collections.Generic.IEnumerator<System.Collections.Generic.IEnumerator<System.IO.FileInfo>>'.

为什么会出现此错误,以及如何更正我的代码?

斯坦利

一个问题在这里:

where T : IEnumerator<T> 

您将泛型类限制为自己的枚举器类

由于FileInfo不是IEnumerator<FileInfo>IEnumerator<FileInfo>不是,IEnumerator<IEnumerator<FileInfo>>它将使通用约束失效。

可以添加第二个泛型类型:

private static bool CyclicalSafeMoveNext<T, U>(T Enoomerator) 
                                       where T : IEnumerator<U>

或只是IEnumerator<T>签名的一部分:

private static bool CyclicalSafeMoveNext<T>(IEnumerator<T> Enoomerator) 

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

类型“ T”不能用作通用类型或方法中的类型参数“ T”

来自分类Dev

Ninject ASP.NET标识在通用类型或方法中,类型“ .....”不能用作类型参数“ TImplementation”

来自分类Dev

存储库不能用作方法的通用类型中的类型参数

来自分类Dev

存储库不能用作方法的通用类型中的类型参数

来自分类Dev

错误:“该类型不能用作方法的通用类型中的类型参数。” 可以通过约束或强制转换来解决吗?

来自分类Dev

该类型不能用作通用类型或方法'BaseController <T>'中的类型参数'T'。没有隐式引用

来自分类Dev

该类型不能用作通用类型或方法中的类型“ T”。没有从到的隐式引用转换

来自分类Dev

类型不能在通用类型或方法中用作类型参数“ T”-为什么?

来自分类Dev

泛型方法类型不能用作泛型类的泛型类型

来自分类Dev

类型''不能在通用类型或方法''中用作类型参数'T'。没有从“到”的隐式引用转换

来自分类Dev

通用方法参数的类型

来自分类Dev

方法参数的通用类型

来自分类Dev

通用方法类型参数声明

来自分类Dev

通用方法类型参数确定

来自分类Dev

Java通用方法类型参数

来自分类Dev

检查方法参数的通用类型

来自分类Dev

通用类型作为方法参数

来自分类Dev

通用方法类型参数声明

来自分类Dev

Java通用方法类型参数

来自分类Dev

无法解析用作通用类型参数的符号

来自分类Dev

为什么我不能在Kotlin中将Class类型用作通用参数?

来自分类Dev

通用方法的通用返回类型

来自分类Dev

通用方法的通用返回类型

来自分类Dev

通用方法返回类型作为类型参数

来自分类Dev

当使用相互约束的类型参数调用通用扩展方法时,不能省略扩展类型参数

来自分类Dev

从参数动态推断通用方法的类型参数

来自分类Dev

获取错误“类型参数不能用作限定符”

来自分类Dev

类型“ MyObject”必须是不可为空的值类型,以便在通用类型或方法“ Nullable <T>”中将其用作参数“ T”

来自分类Dev

类型的通用方法

Related 相关文章

  1. 1

    类型“ T”不能用作通用类型或方法中的类型参数“ T”

  2. 2

    Ninject ASP.NET标识在通用类型或方法中,类型“ .....”不能用作类型参数“ TImplementation”

  3. 3

    存储库不能用作方法的通用类型中的类型参数

  4. 4

    存储库不能用作方法的通用类型中的类型参数

  5. 5

    错误:“该类型不能用作方法的通用类型中的类型参数。” 可以通过约束或强制转换来解决吗?

  6. 6

    该类型不能用作通用类型或方法'BaseController <T>'中的类型参数'T'。没有隐式引用

  7. 7

    该类型不能用作通用类型或方法中的类型“ T”。没有从到的隐式引用转换

  8. 8

    类型不能在通用类型或方法中用作类型参数“ T”-为什么?

  9. 9

    泛型方法类型不能用作泛型类的泛型类型

  10. 10

    类型''不能在通用类型或方法''中用作类型参数'T'。没有从“到”的隐式引用转换

  11. 11

    通用方法参数的类型

  12. 12

    方法参数的通用类型

  13. 13

    通用方法类型参数声明

  14. 14

    通用方法类型参数确定

  15. 15

    Java通用方法类型参数

  16. 16

    检查方法参数的通用类型

  17. 17

    通用类型作为方法参数

  18. 18

    通用方法类型参数声明

  19. 19

    Java通用方法类型参数

  20. 20

    无法解析用作通用类型参数的符号

  21. 21

    为什么我不能在Kotlin中将Class类型用作通用参数?

  22. 22

    通用方法的通用返回类型

  23. 23

    通用方法的通用返回类型

  24. 24

    通用方法返回类型作为类型参数

  25. 25

    当使用相互约束的类型参数调用通用扩展方法时,不能省略扩展类型参数

  26. 26

    从参数动态推断通用方法的类型参数

  27. 27

    获取错误“类型参数不能用作限定符”

  28. 28

    类型“ MyObject”必须是不可为空的值类型,以便在通用类型或方法“ Nullable <T>”中将其用作参数“ T”

  29. 29

    类型的通用方法

热门标签

归档