通用方法调用

时间:2008-10-02 01:34:46

标签: c# generics

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());

        }
    }
}

我需要在上面指定的代码行中进行哪些更改才能使其正常工作。我只是想传递List或数组以获得计数。

4 个答案:

答案 0 :(得分:4)

你想要这个

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

答案 1 :(得分:0)

您的通用约束是错误的。您无法强制执行IEnumerabl&lt; T&gt;

答案 2 :(得分:0)

你有“哪里T:IEnumerable&lt; T&gt;”,这不是你想要的。将其更改为例如“IEnumerable的&LT;串gt;” 中它会编译。在这种情况下,“T”是List&lt; string&gt;,这是一个IEnumerable&lt; string&gt ;.

答案 3 :(得分:0)

你的count方法期望一种IEnumerable,然后你将T设置为List,这意味着该方法将期望IEnumerable&gt;这不是你传递的内容。

相反,你应该将参数类型限制为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());

        }
    }
}