当前位置:  开发笔记 > 编程语言 > 正文

通用方法处理IEnumerable与泛型类型不同

如何解决《通用方法处理IEnumerable与泛型类型不同》经验,为你挑选了0个好方法。

请检查以下代码段:

public interface ICountable { }
public class Counter
    where T : ICountable
{
    public int Count(IEnumerable items)
    {
        return 0;
    }

    public int Count(T Item)
    {
        return 0;
    }
}

public class Counter
{
    public int Count(IEnumerable items)
        where T : ICountable
    {
        return 0;
    }

    public int Count(T Item)
        where T : ICountable
    {
        return 0;
    }
}

Counter的两个版本仅在泛型参数的规范上有所不同.其中一个定义为泛型类型参数,另一个定义为泛型参数.两者都限制方法参数以实现ICountable接口.我将分别称他们为具体非具体.

现在,我定义了一个实现ICountable接口的类,以及一组实例:

public class CItem : ICountable { }
var countables = new List();

然后,我想在集合中使用两个Counter类.

var specific = new Counter();
var nonspecific = new Counter();

specific.Count(countables);
nonspecific.Count(countables);

特定计数器识别countables集合应该属于签名int Count(IEnumerable),但非特定版本不会.我收到错误:

类型' System.Collections.Generic.List'不能T在泛型类型或方法' Counter.Count(T)'中用作类型参数' '.没有从List'到的隐式引用转换 ICountable.

似乎非特定版本对集合使用了错误的签名.

他们为什么表现不同?如何指定非特定版本以使其行为与另一个相同?

注意:我知道这个例子是不现实的.但是,我在一个非常复杂的场景中使用扩展方法遇到了这个问题.为简单起见,我使用这些类

提前致谢

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有