通用方法调用

时间:2020-03-06 15:00:21  来源:igfitidea点击:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace GenericCount
{
    class Program
    {
        static int Count1<T>(T a) where T : IEnumerable<T>
        {
            return a.Count();
        }

        static void Main(string[] args)
        {
            List<string> mystring = new List<string>()
            {
                "rob","tx"
            };

            int count = Count1<List<string>>(mystring);******
            Console.WriteLine(count.ToString());

        }
    }
}

我必须在上面指示的代码行中进行哪些更改才能使其正常工作。我只是试图通过列表或者数组以获取计数。

解决方案

一般约束是错误的。我们不能强制执行IEnumerabl <T>

我们有" where T:IEnumerable <T>",这不是我们想要的。将其更改为例如" IEnumerable <string>"它将编译。在这种情况下," T"是List <string>,它是IEnumerable <string>。

你要这个

static int Count1<T>(IEnumerable<T> a)
{
    return a.Count();
}

count方法期望使用IEnumerable类型,然后将T设置为List,这意味着该方法期望使用IEnumerable>,而不是我们要传递的内容。

相反,我们应该将参数类型限制为IEnumerable,并且可以使T不受约束。

namespace GenericCount
{
    class Program
    {
        static int Count1<T>(IEnumerable<T> a)
        {
            return a.Count();
        }

        static void Main(string[] args)
        {
            List<string> mystring = new List<string>()
        {
            "rob","tx"
        };

            int count = Count1(mystring);
             Console.WriteLine(count.ToString());

        }
    }
}