List<t> 的扩展方法无法识别 class C# 的实例方法
Extension Method of List<t> not recognize Instance method of the class C#
我有一个联系人 class,我想为那个 class 的列表创建一个扩展方法,但它无法识别我的 con.GetName() 函数。
我使用了 right refernce 并且它确实识别了 class 名称,尽管它不会识别 class
的实例方法
public static string ToString (this List<Contact> Contacts)
{
string str = "";
foreach(Contact con Contacts)
{
str += con.GetName() + ", ";
}
return str.Substring(0, str.Length - 2);
}
编辑:我在函数行删除了,但现在出现了另一个错误,这次它标记了函数的名称(ToString),我试图更改名称,但没有任何成功或更改。
现在 GetName() 工作了。
Severity Code Description Project File Line Suppression State
Error CS0051 Inconsistent accessibility: parameter type 'List<Contact>' is less accessible than method 'MyExtensions.ToString(List<Contact>)' Whatsapp D:\Whatsapp Versions.6\Whatsapp\ExtensionMethods.cs 100 Active
这是打字错误吗?你不小心写了 <Contact>
:
public static string ToString <Contact>(this List<Contact> Contacts)
^^^^^^^^^^
here
这使得 Contact
成为通用类型参数,使您的扩展方法适用于任何 List<T>
。显然您无法访问 Contact
的成员,因为该列表可以是任何内容的列表。要解决此问题,请删除通用参数:
public static string ToString(this List<Contact> Contacts)
请注意,当您直接在 List<Contact>
上调用它时,不会选择此扩展方法,因为 List
已经有一个 ToString
方法(实际上所有 类 ...)。所以调用 your ToString
的唯一方法是 SurroundClass.ToString(someList)
。我建议你重命名该方法。
您的代码至少有两个问题:
如果您调用您的分机 ToString()
,您将无法像分机一样使用它,因为如果您有一个
List<Contact> myContacts = ...
Console.WriteLine(myContacts.ToString());
编译器将始终选择 List<T>
class 的 *实例方法 ToString()
而不是您的扩展。
您声明了您的方法 generic (ToString<Contact>
),当您只想在此处接受 List<Contact>
时,这不是必需的。请注意,您在此处编写的 Contact
现在是通用 类型参数 而不是您的 Contact
类型。这就是编译器不知道 GetName()
方法的原因:con
不是 Contact
类型,而是编译时未知的泛型类型。
我建议使用 string.Join
而不是连接字符串 "by hand":
所以最后的建议:
public static string AsString(this List<Contact> contacts) =>
string.Join(", ", contacts.Select(c => c.GetName());
我有一个联系人 class,我想为那个 class 的列表创建一个扩展方法,但它无法识别我的 con.GetName() 函数。 我使用了 right refernce 并且它确实识别了 class 名称,尽管它不会识别 class
的实例方法public static string ToString (this List<Contact> Contacts)
{
string str = "";
foreach(Contact con Contacts)
{
str += con.GetName() + ", ";
}
return str.Substring(0, str.Length - 2);
}
编辑:我在函数行删除了,但现在出现了另一个错误,这次它标记了函数的名称(ToString),我试图更改名称,但没有任何成功或更改。 现在 GetName() 工作了。
Severity Code Description Project File Line Suppression State
Error CS0051 Inconsistent accessibility: parameter type 'List<Contact>' is less accessible than method 'MyExtensions.ToString(List<Contact>)' Whatsapp D:\Whatsapp Versions.6\Whatsapp\ExtensionMethods.cs 100 Active
这是打字错误吗?你不小心写了 <Contact>
:
public static string ToString <Contact>(this List<Contact> Contacts)
^^^^^^^^^^
here
这使得 Contact
成为通用类型参数,使您的扩展方法适用于任何 List<T>
。显然您无法访问 Contact
的成员,因为该列表可以是任何内容的列表。要解决此问题,请删除通用参数:
public static string ToString(this List<Contact> Contacts)
请注意,当您直接在 List<Contact>
上调用它时,不会选择此扩展方法,因为 List
已经有一个 ToString
方法(实际上所有 类 ...)。所以调用 your ToString
的唯一方法是 SurroundClass.ToString(someList)
。我建议你重命名该方法。
您的代码至少有两个问题:
如果您调用您的分机
ToString()
,您将无法像分机一样使用它,因为如果您有一个List<Contact> myContacts = ... Console.WriteLine(myContacts.ToString());
编译器将始终选择
List<T>
class 的 *实例方法ToString()
而不是您的扩展。您声明了您的方法 generic (
ToString<Contact>
),当您只想在此处接受List<Contact>
时,这不是必需的。请注意,您在此处编写的Contact
现在是通用 类型参数 而不是您的Contact
类型。这就是编译器不知道GetName()
方法的原因:con
不是Contact
类型,而是编译时未知的泛型类型。我建议使用
string.Join
而不是连接字符串 "by hand":
所以最后的建议:
public static string AsString(this List<Contact> contacts) =>
string.Join(", ", contacts.Select(c => c.GetName());