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

贾斯普雷特·辛格

这是我的通用类

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

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

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]并不总是有意义的。

这就是为什么你的代码没有多大意义。您需要将其限制为仅适用于IList<CustomClass<T>>,或者更具体地说,IList<CustomClass<int>>如果您想Data成为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)

如果您希望它适用于 all IEnumerable<CustomClass<T>>,那么您需要使用e.First()而不是e[0](除其他外)。如果不知道CustomAll.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在有IEnumerator <T>时需要IEnumerable <T>?

F#中的自定义IEnumerator

为什么IEnumerator.Current的错误处理与IEnumerator <T> .Current不同?

使用“ yield”时,为什么编译器生成的类型同时实现IEnumerable和IEnumerator

使用IEnumerator遍历列表

为什么类的方法无法访问类的某些字段?

Unity使用IENumerator设置另一个对象将使用的类

无法从“方法组”转换为“ IEnumerator”

将IEnumerator的元素获取到列表

Matlab:当实现在超类中声明为抽象的方法时,为什么必须公开访问?

IEnumerator方法可编译但无效

为什么接口IEnumerable返回IEnumerator GetEnumemrator()?为什么不仅仅实现IEnumerator接口呢?

使用混合项目时,为什么在Java类中无法访问Scala案例类中的Lombok?

为什么`this`在调用派生类对象时无法从基类方法访问派生类成员

使用类中的扩展方法进行扩展

实现IEnumerator接口时,int如何映射到IEnumerator <int>?

使用IEnumerator在母版页中获取表单名称

Java:为什么我们可以从非子类访问字段和方法时需要扩展类

NullReferenceException尝试迭代IEnumerator时出错

为什么在GetCurrent之前调用IEnumerator.MoveNext?

为什么我无法在Python中通过以下方法之一访问类变量?

如何正确使用协程和回调?从 IEnumerator 中检索数组

如何使用链方法访问扩展类中的公共变量?

在 IEnumerator 协程中设置类变量

C# 使用 IEnumerator 遍历嵌套属性

什么时候应该创建从 IEnumerator/IEnumerable 派生的类?

如何使用自定义 IEnumerator 类生成协程

什么是 C# 中的 IEnumerator,它在 Unity 中的用途是什么?

为什么在声明接口方法时不使用“IEnumerator IEnumerator.GetEnumerator()”?IEnumerable 接口