为什么在使用 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
.
的实现的情况下,我无法确切地告诉你如何写这个
这是我的通用 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
.