为什么在使用 IEnumerator class 列表时无法在扩展方法中访问 class 方法

Why class method are not accessible in Extension Method while using IEnumerator class List

这是我的通用 Class

public class CustomClass<T>
    {
        public T Data { set; get; }
        public T getData()
        {
            return Data;
        }
    }

这是我的主要方法

static void Main(string[] args)
        {
            mylist = new List<CustomClass<int>>();
            CustomClass<int> customClass = new CustomClass<int>();
            customClass.Data = 10;
            CustomClass<int> customClass1 = new CustomClass<int>();
            customClass1.Data = 10;
            mylist.Add(customClass);
            mylist.Add(customClass1);
            CustomClass<int> custom = new CustomClass<int>();
            custom.Data = 20;
            mylist.Add(custom);
            Console.WriteLine(mylist[0].getData());
            Console.WriteLine("----------All----------");
            Console.WriteLine(value: mylist.CustomAll('%', 3, AllAny));
            }

这是我想接收自定义数据的扩展 Class 但显示错误

public static class CustomOperation
    {

        public static bool CustomAll<T>(this IEnumerable<T> e, char symbol, int compare, Action<List<T>, int, char, bool> func)
        {
            e[0].Data// Error here I want CustomClass Data
            return true;
        }

请注意,您的扩展方法也适用于 List<string>,以及 List<string>(实际上是 List 的任何一种):

// This compiles!
var intList = new List<int> {1,2,3};
intList.CustomAll('a', 0, (a,b,c,d) => {});

e[0] 会是 int,那么 e[0].Data 会是什么? int 没有名为 Data!

的成员

这不是唯一的问题,它也可以在任何 IEnumerable 上使用。并非所有 IEnumerable 都可以用 int 进行索引,因此 e[0] 并不总是有意义。

这就是为什么您的代码没有多大意义。如果您希望 Data 成为 int:

,您需要将其限制为仅在 IList<CustomClass<T>> 上工作,或者更具体地说,IList<CustomClass<int>>
public static bool CustomAll<T>(this IList<CustomClass<T>> e, char symbol, int compare, Action<List<CustomClass<T>>, int, char, bool> func)
// or
public static bool CustomAll(this IList<CustomClass<int>> e, char symbol, int compare, Action<List<CustomClass<int>>, int, char, bool> func)

如果你想让它在所有 IEnumerable<CustomClass<T>> 上工作,那么你需要使用 e.First() 而不是 e[0](除其他外)。在不知道 CustomAll.

的实现的情况下,我无法确切地告诉你如何写这个