让我们列出你发布优秀和最喜欢的扩展方法的答案.
要求是必须发布完整代码并提供示例和如何使用它的说明.
基于对该主题的高度关注,我在Codeplex上设置了一个名为extensionoverflow的开源项目.
请标记您的答案并接受将代码放入Codeplex项目中.
请发布完整的源代码而不是链接.
Codeplex新闻:
24.08.2010 Codeplex页面现在在这里:http://extensionoverflow.codeplex.com/
11.11.2008 XmlSerialize/XmlDeserialize现在已实现并且已经过单元测试.
11.11.2008仍有更多开发人员的空间.;-) 现在加入!
11.11.2008第三个贡献者加入了ExtensionOverflow,欢迎来到BKristensen
11.11.2008 FormatWith现在已实现且已经过单元测试.
09.11.2008第二个贡献者加入了ExtensionOverflow.欢迎来到chakrit.
09.11.2008我们需要更多开发人员.;-)
请建议一种最简单的方法,从具有'N'项的集合中获取计数'n'的随机混洗集合.其中n <= N
类似的还有这与正确的输入和输出类型涉及几个问题是这样.我的问题更多的是正确的做法,方法命名,选择参数类型,事故等维护中的唤醒IEnumerable.
Linq几乎所有地方都处理,IEnumerable而这不是它,但它也引入了一些我们称之为延迟执行的异类.现在,当我们认为最好的想法是采用最基本的类型时,我们可能在设计我们的方法(特别是扩展方法)时出错了.所以我们的方法看起来像:
public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> lstObject)
{
foreach (T t in lstObject)
//some fisher-yates may be
}
Run Code Online (Sandbox Code Playgroud)
显而易见的危险是当我们将上述功能与懒惰混合Linq并且如此易受影响时.
var query = foos.Select(p => p).Where(p => p).OrderBy(p => p); //doesn't execute
//but
var query = foos.Select(p => p).Where(p => p).Shuffle().OrderBy(p => p);
//the second line executes up to a point.
Run Code Online (Sandbox Code Playgroud)
澄清上面这一行 - 我的问题不是关于第二个表达没有得到评估,严重不是.程序员都知道.我担心的是Shuffle到目前为止实际执行查询的方法.查看第一个查询,其中没有任何内容被执行.现在类似于构造另一个Linq表达式(应该稍后执行)时,我们的自定义函数正在播放spoilsport.换句话说,如何让调用者知道Shuffle并不是他们在Linq表达点上想要的那种功能.我希望这一点被带回家.道歉!:)虽然它就像去检查方法一样简单,但我问你们通常如何防御性地编程......
上面的例子可能没那么危险,但你明白了.这是某些(自定义)函数与Linq延迟执行的想法不相符.问题不仅在于性能,还在于意外的副作用. …
我有一个IEnumerable集合如下
var result1 = GetResult1() // Returns 2,4,5,6
Run Code Online (Sandbox Code Playgroud)
我必须以随机方式处理元素并创建另一个集合,结果如下:
var result2 = GetResult2(result1) // Returns 2,4,5,6 in a random order.
// An example output would be 4,6,2,5 in the resultant collection.
Run Code Online (Sandbox Code Playgroud)
我通过以下方式完成此操作:
var result1 = GetResult1();
var random = new Random();
var result2 = result1.OrderBy(order=>random.Next());
Run Code Online (Sandbox Code Playgroud)
然而,这个问题是如果我访问result2,result2中的元素会再次被洗牌,即如果我将result2的结果输出到控制台两次,则元素会再次变为juggled.
能告诉你如何保持这种制服.也就是说,一旦我处理了这个集合,它应该保持相同的方式.我必须使用懒惰的评估,因为结果非常大.
使用 C# 6 我有一个按字母顺序排列的名称列表:
List<String> names = getAlphabeticallyOrderedNames();
Run Code Online (Sandbox Code Playgroud)
我需要重新排列名称,但我想每次都得到相同的结果。所以我不能使用:
List<String> shuffledNames = names.OrderBy(x => Guid.NewGuid());
Run Code Online (Sandbox Code Playgroud)
然后我尝试了类似的事情:
List<String> shuffledNames = names.OrderBy(x => "d2fda3b5-4089-43f9-ba02-f68d138dee49");
Run Code Online (Sandbox Code Playgroud)
或者
List<String> shuffledNames = names.OrderBy(x => Int32.MaxValue);
Run Code Online (Sandbox Code Playgroud)
但名字并没有被打乱......
我该如何解决这个问题?
如何获取列表并随机订购?
List< Testimonial > testimonials = new List< Testimonial >();
testimonials.Add(new Testimonial {1} );
testimonials.Add(new Testimonial {2} );
testimonials.Add(new Testimonial {2} );
testimonials.Add(new Testimonial {3} );
testimonials.Add(new Testimonial {4} );
Run Code Online (Sandbox Code Playgroud)
我该怎么用
testimonials.OrderBy<>
Run Code Online (Sandbox Code Playgroud)
为了让它随机?
我有一个对象列表,我想随机排列或混乱.这可能吗?该列表由公司产品构成.我占据了每家公司的前2名,并将其余的添加到另一个名单中.我想混淆第二个清单.
谢谢你的帮助
c# ×6
ienumerable ×3
linq ×2
.net ×1
asp.net ×1
asp.net-mvc ×1
c#-4.0 ×1
list ×1
open-source ×1
parameters ×1
random ×1
shuffle ×1