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