我正在设计许多(希望是数千)玩家可以同时玩某些纸牌游戏的游戏网站。这副牌是标准的52张牌。每张牌都有花色和等级。牌将一直被洗牌、发牌、挑选、排序、打出。我的问题是,Card应该是枚举、结构还是类?对于枚举:设每张卡片为一个字节0..51。所以一张卡会占用很少的空间。您可以将一只watch示为8个字节的位集。您可以在需要时非常快速地计算给定卡片的花色和点数:即花色(n)=n/13。这将非常有效。如果需要为Cards写方法,就通过扩展方法来写。对于结构:不,这就像编写机器代码。卡是一种简单的结构,保存的数据很少,不可变,很小。它没有太多行为,因此将其设为结构并将其视为被动数据结构。当需要时
我有大量地理数据以仅包含结构的简单对象结构表示。我的所有字段都是值类型。publicstructChild{readonlyfloatX;readonlyfloatY;readonlyintmyField;}publicstructParent{readonlyintid;readonlyintfield1;readonlyintfield2;readonlyChild[]children;}数据被很好地分块到Parent[]-s的一小部分。每个数组包含几千个Parent实例。我有太多数据无法全部保存在内存中,因此我需要将这些block来回交换到磁盘。(一个文件将产生大约2-300KB
我注意到List将其枚举器定义为struct,而ArrayList将其枚举器定义为class.有什么不同?如果我要为我的类(class)写一个枚举器,哪个更好?编辑:使用yield无法满足我的要求,所以我正在实现自己的枚举器。也就是说,我想知道遵循List的路线是否会更好。并将其作为结构实现。 最佳答案 像其他人一样,我会选择一个类(class)。可变结构是讨厌的。(正如Jared所建议的那样,我会使用迭代器block。手动编写枚举器代码很费力才能正确。)参见thisthread例如,列表枚举器是一个导致问题的可变结构......
这是一个后续问题:List.ContainsandT[].ContainsbehavingdifferentlyT[].Contains当T时表现不同是类和结构。假设我有这个结构:publicstructAnimal:IEquatable{publicstringName{get;set;}publicboolEquals(Animalother)//在这里,通用Equals如我所料被正确调用。但是对于类:publicclassAnimal:IEquatable{publicstringName{get;set;}publicboolEquals(Animalother){return
编辑未使用的cmp指令将导致NullPointerException。Whatarethesestrangecmp[ecx],ecxinstructionsdoinginmyC#code?原始帖子(下面有更多编辑)我正在尝试了解JIT编译代码的方式。在内存中我有一个3个字符的字段。在C++中比较两个这样的字段我可以这样做:return((*(DWORD*)p)&0xFFFFFF00)==((*(DWORD*)q)&0xFFFFFF00);MSVC2010将生成如下内容(从内存中):1movedx,dwordptr[rsp+8]2andedx,0FFFFFF00h3movecx,dwor
MSDN明确指出Forallothertypes,includingstructs,thesizeofoperatorcanonlybeusedinunsafecodeblocks.C#LanguageSpecification更精确:成员打包到结构中的顺序是未指定的。出于对齐目的,开头可能有未命名的填充结构的一部分、结构内的和结构的末尾。用作填充的位的内容是不确定的。当应用于具有结构类型的操作数时,结果是该类型变量中的字节总数,包括任何填充。但是CLR将如何处理以下结构:[StructLayout(LayoutKind.Explicit,Size=1,Pack=1)]publicst
我有一个结构MyStruct,它有一个私有(private)成员privatebool[]boolArray;和一个方法ChangeBoolValue(intindex,boolValue)。我有一个类MyClass,它有一个字段publicMyStructbools{get;私有(private)集;}当我从现有对象创建一个新的MyStruct对象,然后应用方法ChangeBoolValue()时,两个对象中的bool数组都被更改,因为引用,而不是被引用的内容,被复制到新对象。例如:MyStructA=newMyStruct();MyStructB=A;//CopyofAmadeB.
请解释结构构造函数的以下错误。如果我将结构更改为类错误消失了。publicstructDealImportRequest{publicDealRequestBaseDealReq{get;set;}publicintImportRetryCounter{get;set;}publicDealImportRequest(DealRequestBasedrb){DealReq=drb;ImportRetryCounter=0;}}错误CS0188:“this”对象在其所有字段都分配给之前无法使用错误CS0843:自动实现属性的支持字段“DealImportRequest.DealReq”必
我有这个结构和这段代码:[StructLayout(LayoutKind.Sequential,Pack=8)]privateclassxvid_image_t{[MarshalAs(UnmanagedType.ByValArray,SizeConst=4)]publicint[]stride;//[MarshalAs(UnmanagedType.ByValArray,SizeConst=4)]//publicIntPtr[]plane;}publicintdecore(){xvid_image_tmyStruct=newxvid_image_t();myStruct.stride=n
我有一个包含两个列表的结构:structMonthData{publicListFrontline;publicListLeadership;}但是,我想在创建结构时初始化两者。如果我尝试:structMonthData{publicListFrontline=newList();publicListLeadership=newList();}然后我得到:Error23'MonthData.Frontline':cannothaveinstancefieldinitializersinstructs...由于结构不能有无参数的构造函数,我也不能只在构造函数中设置它。到目前为止,我只能看