【发布时间】:2018-06-18 16:26:12
【问题描述】:
我有一个联系人类,我想为该类的列表创建一个扩展方法,但它无法识别我的 con.GetName() 函数。 我用了正确的引用,它确实识别类名,虽然它不会识别类的实例方法
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\17.6\Whatsapp\ExtensionMethods.cs 100 Active
【问题讨论】:
-
向我们展示
GetName方法,并确保您有正确的导入。 -
为什么这个方法是通用的?注意这里的
Contact是通用类型参数,而不是你的类Contact。由于您只关心Contacts,因此不要将方法设为通用。更糟糕的是:你永远不能像扩展一样调用这个方法,因为List<T>像所有类型一样已经定义了一个名为ToSTring()的实例方法,它将始终被选择而不是你的扩展。 -
@RenéVogt 好吧,因为它是通用的,您可以通过指定类型参数来调用它,但正如 Sweeper 在他们的回答中所说,它根本不需要。
-
您可以缩短您的代码:
return string.Join(", ", Contacts.Select(c => c.GetName()));
标签: c# visual-studio extension-methods