c#泛型,涵盖数组和列表?

c#泛型,涵盖数组和列表?,第1张

概述这是一个非常方便的扩展,它适用于任何数组: public static T AnyOne<T>(this T[] ra) where T:class{ int k = ra.Length; int r = Random.Range(0,k); return ra[r];} 不幸的是,它不适用于List<>任何东西.这是相同的扩展名,适用于任何List<> public 这是一个非常方便的扩展,它适用于任何数组:
public static T AnyOne<T>(this T[] ra) where T:class{    int k = ra.Length;    int r = Random.Range(0,k);    return ra[r];}

不幸的是,它不适用于List<>任何东西.这是相同的扩展名,适用于任何List<>

public static T AnyOne<T>(this List<T> Listy) where T:class{    int k = Listy.Count;    int r = Random.Range(0,k);    return Listy[r];}

事实上,是否有一种方法可以一目了然地泛化包含数组和List的泛型?还是知道是不可能的?

对我来说,答案甚至可以进一步包含收藏?或者确实有下面的专家之一已经实现了?

PS,对于没有明确提到这是在Unity3D环境中,我很抱歉. “Random.Range”是一个统一到骨骼的功能,“AnyOne”调用将任何游戏工程师的100%游戏引擎读取.这是您为任何游戏项目输入的第一个扩展名,您可以在游戏代码(“任何爆炸!”“任何硬币音效”等等中使用它)

显然,它当然可以用于任何c#环境.

解决方法 事实上,T []和List
public static T AnyOne<T>(this IReadonlyList<T> List) where T:class{    int k = List.Count;    int r = Random.Range(0,k);    return List[r];}

如另一答案所述,IList< T>但是良好的做法要求您从调用者请求方法所需的最小功能,在这种情况下是Count属性和只读索引器.

IEnumerable的< T>也可以使用调用者传递一个非集合迭代器,其中Count和ElementAt扩展方法可能非常低效 – 例如Enumerable.Range(0,1000000),数据库查询等.

Unity3D工程师的注意事项:如果您查看IReadOnlyList Interface documentation‌的底部,则可以从.Net 4.5开始.在.Net的早期版本中,您必须诉诸于IList< T> (自2.0开始使用). Unity在.Net版本上保持不变.对于2016 Unity仅使用.Net 2.0.5.所以对于Unity3D,你必须使用IList&T.

总结

以上是内存溢出为你收集整理的c#泛型,涵盖数组和列表?全部内容,希望文章能够帮你解决c#泛型,涵盖数组和列表?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1261611.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存