上下文:C#3.0、.Net3.5假设我有一个生成随机数的方法(永远):privatestaticIEnumerableRandomNumberGenerator(){while(true)yieldreturnGenerateRandomNumber(0,100);}我需要将这些数字以10个为一组进行分组,所以我想要这样的东西:foreach(IEnumerablegroupinRandomNumberGenerator().Slice(10)){Assert.That(group.Count()==10);}我已经定义了Slice方法,但我觉得应该已经定义了一个。这是我的切片方法,
在C#中,从对象枚举器创建对象数组的最优雅方法是什么?例如在这种情况下,我有一个可以返回字节的枚举器,所以我想将其转换为byte[]。编辑:创建枚举器的代码:IEnumeratorenumerator=anObject.GetEnumerator(); 最佳答案 好的,所以,假设您有一个实际的枚举器(IEnumerator),您可以使用while循环:varlist=newList();while(enumerator.MoveNext())list.Add(enumerator.Current);vararray=list.ToA
我有一个像这样的枚举:publicenumTest:int{A=1,B=2}所以在这里我知道我的枚举是一个int类型但是如果我想做如下的事情:inta=Test.A;这行不通。如果我有这样的类(class):publicclassMyTest{publicstaticintA=1;}我可以说,inta=MyTest.A;这里我不需要将A显式转换为int。 最佳答案 SohereIknowmyenumisaninttype不,不是。它有底层int类型,但它是一个单独的类型。哎呀,这就是首先使用枚举的一半意义-您可以将类型分开。当您想要
我注意到List将其枚举器定义为struct,而ArrayList将其枚举器定义为class.有什么不同?如果我要为我的类(class)写一个枚举器,哪个更好?编辑:使用yield无法满足我的要求,所以我正在实现自己的枚举器。也就是说,我想知道遵循List的路线是否会更好。并将其作为结构实现。 最佳答案 像其他人一样,我会选择一个类(class)。可变结构是讨厌的。(正如Jared所建议的那样,我会使用迭代器block。手动编写枚举器代码很费力才能正确。)参见thisthread例如,列表枚举器是一个导致问题的可变结构......
有没有一种在C#中仅枚举Collection的子集的好方法?也就是说,我有一个包含大量对象(比如1000)的集合,但我只想枚举250-340个元素。有没有一种好的方法可以为集合的子集获取枚举器,而无需使用另一个集合?编辑:应该提到这是使用.NETFramework2.0。 最佳答案 尝试以下操作varcol=GetTheCollection();varsubset=col.Skip(250).Take(90);或者更一般的publicstaticIEnumerableGetRange(thisIEnumerablesource,in
直到询问question在这里我从来没有认为(枚举)是一件“坏事”。对于那些认为它们不是最佳实践的人,有哪些方法/模式可以避免在代码中使用它们?编辑:publicEnumSomeStatusApproved=1Denied=2Pending=3endEnum 最佳答案 Fowler的Refactoring中描述了枚举的问题。,它被认为是代码味道。它与类型安全无关,而是迫使您在整个代码中添加switch语句,从而违反了DRY原则。Statepattern是相同结构的更好模型,因为它允许您在同一类中实现和改变与相同状态相关的逻辑。这也增
考虑以下C#程序:usingSystem;usingSystem.Linq;usingSystem.Collections.Generic;publicclassTest{staticIEnumerableGet(){for(inti=0;iConsole.WriteLine(capture.ToString());}}publicstaticvoidMain(string[]args){foreach(varainGet())a();foreach(varainGet().ToList())a();}}在Mono编译器下执行时(例如Mono2.10.2.0-粘贴到here),它会写入
我有许多用户权限,这些权限在我的ASP.NET应用程序中经过测试。这些权限值在枚举中引用,这样我就可以像这样方便地测试权限:btnCreate.Enabled=PermissionManager.TestPermission(Permission.AllowCreate);但是,我也将这些权限存储在数据库中,因为我需要保存有关它们的更多信息,而不仅仅是它们的ID。但这在枚举值和数据库中的值之间产生了可怕的依赖性,对任何一个的更改都经过深思熟虑,我在整个应用程序中都遇到了问题。有没有更好的方法解决这个问题?以前有人处理过这个问题吗? 最佳答案
我在System.Windows.Forms命名空间中找到了这个gem(IMO)。我正在努力弄清楚为什么要这样设置。[Flags]publicenumMouseButtons{None=0,Left=1048576,Right=2097152,Middle=4194304,XButton1=8388608,XButton2=16777216,}有人可以解释为什么它使用这些值(2^20到2^24的幂)而不是这个:publicenumMouseButtons{None=0,Left=1,//2^0Right=2,//2^1Middle=4,//2^2XButton1=8,//2^3XBut
当我使用下面的代码时:usingSystem;namespaceFoo{[Flags]publicenumBar:ulong{None=0x0000000000000000,A=0x8000000000000000,B=0x0000000000000001L|A,C=0x0000000000000002L|B,D=0x0000000000000004L|A,All=A|B|C|D}}单声道编译器崩溃。这是由于语义错误(语言中不允许的错误)造成的,但编译器没有注意到,还是编译器错误?版本:Mono2.10.8.1我已经在bugzilla(https://bugzilla.xamarin.