通用方法调用
时间: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());
}
}
}

