C# 扩展方法必须在非泛型静态类中定义
我在web表单中有以下代码:C# 扩展方法必须在非泛型静态类中定义,c#,C#,我在web表单中有以下代码: namespace TrendsTwitterati { public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { List<TweetEntity> tweetEntity = tt.GetTweetEntity(1, "")
namespace TrendsTwitterati
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<TweetEntity> tweetEntity = tt.GetTweetEntity(1, "")
.DistinctBy(e => e.EntityPicURL);
}
public static IEnumerable<TSource> DistinctBy<TSource, TKey>(
this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
HashSet<TKey> seenKeys = new HashSet<TKey>();
foreach (TSource element in source)
{
if (seenKeys.Add(keySelector(element)))
{
yield return element;
}
}
}
}
}
命名空间TrendsTwitterati
{
公共部分类默认值:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
List tweetEntity=tt.gettweetenty(1,“”)
.DistinctBy(e=>e.entitypiccurl);
}
公共静态IEnumerable DistinctBy(
此IEnumerable源,Func键选择器)
{
HashSet seenKeys=新HashSet();
foreach(源中的TSource元素)
{
if(seenKeys.Add(键选择器(元素)))
{
收益-收益要素;
}
}
}
}
}
当我编译这段代码时,我得到了错误
扩展方法必须在非泛型静态类中定义
我的问题是
以这种方式将您的方法添加到扩展方法的
static
类中
namespace TrendsTwitterati
{
public static class Extension
{
public static IEnumerable<TSource> DistinctBy<TSource, TKey>
(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
HashSet<TKey> seenKeys = new HashSet<TKey>();
foreach (TSource element in source)
{
if (seenKeys.Add(keySelector(element)))
{
yield return element;
}
}
}
}
}
命名空间TrendsTwitterati
{
公共静态类扩展
{
公共静态IEnumerable DistinctBy
(此IEnumerable源,Func键选择器)
{
HashSet seenKeys=新HashSet();
foreach(源中的TSource元素)
{
if(seenKeys.Add(键选择器(元素)))
{
收益-收益要素;
}
}
}
}
}
现在使用它
namespace TrendsTwitterati
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<TweetEntity> tweetEntity = tt.GetTweetEntity(1, "").DistinctBy(e => e.EntityPicURL);
}
}
}
命名空间TrendsTwitterati
{
公共部分类默认值:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
列出tweetEntity=tt.gettweetenty(1“”).DistinctBy(e=>e.entitypecurl);
}
}
}
添加新的静态类
并在其中定义扩展方法。查看扩展方法
namespace TrendsTwitterati
{
public partial class Default: System.Web.UI.Page
{
}
public static class MyExtensions
{
public static IEnumerable < TSource > DistinctBy < TSource, TKey > (this IEnumerable < TSource > source, Func < TSource, TKey > keySelector)
{
HashSet < TKey > seenKeys = new HashSet < TKey > ();
foreach(TSource element in source)
{
if (seenKeys.Add(keySelector(element)))
{
yield
return element;
}
}
}
}
}
命名空间TrendsTwitterati
{
公共部分类默认值:System.Web.UI.Page
{
}
公共静态类MyExtensions
{
公共静态IEnumerableDistinctBy(此IEnumerablesource,FunckeySelector)
{
HashSetseenKeys=newhashset();
foreach(源中的TSource元素)
{
if(seenKeys.Add(键选择器(元素)))
{
产量
返回元素;
}
}
}
}
}
创建单独的静态类,其中包含DistinctBy
方法。从大括号布局判断,您的扩展方法似乎根本不在任何类中。所以这只是把它放在它自己的静态类中的问题。我将如何从page_load function调用它?@Venkat:您只需像您要扩展的类型上的任何其他实例方法一样调用它。您必须引用扩展
类所在的名称空间,但您永远不必引用扩展
本身。明白了吗。现在我得到一个这样的错误。错误13无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Collections.Generic.List”。显式转换存在(是否缺少强制转换?@Venkat add.ToList()
之后是.DistinctBy()
内部静态类的好技巧,但我不知道我首先看到的是尖括号和类型之间的空格。