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

        }
    }
}

上記のコード行を機能させるには、何を変更する必要がありますか。カウントを取得するために、リストまたは配列のいずれかを渡そうとしています。

4

4 に答える 4

4

あなたはこれを求めている

static int Count1<T>(IEnumerable<T> a)
{
    return a.Count();
}
于 2008-10-02T02:04:54.950 に答える
0

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

        }
    }
}
于 2008-10-02T02:11:15.357 に答える
0

一般的な制約が間違っています。IEnumerabl<T> の実装を強制することはできません

于 2008-10-02T01:44:32.003 に答える
0

「where T : IEnumerable<T>」がありますが、これは必要なものではありません。たとえば、「IEnumerable<string>」に変更すると、コンパイルされます。この場合、「T」は IEnumerable<string> である List<string> です。

于 2008-10-02T01:44:39.727 に答える