草庐IT

c# - T[].Contains for struct 和 class 表现不同

这是一个后续问题:List.ContainsandT[].ContainsbehavingdifferentlyT[].Contains当T时表现不同是类和结构。假设我有这个结构:publicstructAnimal:IEquatable{publicstringName{get;set;}publicboolEquals(Animalother)//在这里,通用Equals如我所料被正确调用。但是对于类:publicclassAnimal:IEquatable{publicstringName{get;set;}publicboolEquals(Animalother){return

C# 比较 3 字节字段

编辑未使用的cmp指令将导致NullPointerException。Whatarethesestrangecmp[ecx],ecxinstructionsdoinginmyC#code?原始帖子(下面有更多编辑)我正在尝试了解JIT编译代码的方式。在内存中我有一个3个字符的字段。在C++中比较两个这样的字段我可以这样做:return((*(DWORD*)p)&0xFFFFFF00)==((*(DWORD*)q)&0xFFFFFF00);MSVC2010将生成如下内容(从内存中):1movedx,dwordptr[rsp+8]2andedx,0FFFFFF00h3movecx,dwor

c# - 为什么结构的 sizeof 是不安全的

MSDN明确指出Forallothertypes,includingstructs,thesizeofoperatorcanonlybeusedinunsafecodeblocks.C#LanguageSpecification更精确:成员打包到结构中的顺序是未指定的。出于对齐目的,开头可能有未命名的填充结构的一部分、结构内的和结构的末尾。用作填充的位的内容是不确定的。当应用于具有结构类型的操作数时,结果是该类型变量中的字节总数,包括任何填充。但是CLR将如何处理以下结构:[StructLayout(LayoutKind.Explicit,Size=1,Pack=1)]publicst

C# 结构的自动深拷贝

我有一个结构MyStruct,它有一个私有(private)成员privatebool[]boolArray;和一个方法ChangeBoolValue(intindex,boolValue)。我有一个类MyClass,它有一个字段publicMyStructbools{get;私有(private)集;}当我从现有对象创建一个新的MyStruct对象,然后应用方法ChangeBoolValue()时,两个对象中的bool数组都被更改,因为引用,而不是被引用的内容,被复制到新对象。例如:MyStructA=newMyStruct();MyStructB=A;//CopyofAmadeB.

c# - 编译错误。将属性与结构一起使用

请解释结构构造函数的以下错误。如果我将结构更改为类错误消失了。publicstructDealImportRequest{publicDealRequestBaseDealReq{get;set;}publicintImportRetryCounter{get;set;}publicDealImportRequest(DealRequestBasedrb){DealReq=drb;ImportRetryCounter=0;}}错误CS0188:“this”对象在其所有字段都分配给之前无法使用错误CS0843:自动实现属性的支持字段“DealImportRequest.DealReq”必

c# - blittable 类型上的非 blittable 错误

我有这个结构和这段代码:[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

c# - 有没有一种方法可以在不使用构造函数的情况下初始化结构的成员?

我有一个包含两个列表的结构:structMonthData{publicListFrontline;publicListLeadership;}但是,我想在创建结构时初始化两者。如果我尝试:structMonthData{publicListFrontline=newList();publicListLeadership=newList();}然后我得到:Error23'MonthData.Frontline':cannothaveinstancefieldinitializersinstructs...由于结构不能有无参数的构造函数,我也不能只在构造函数中设置它。到目前为止,我只能看

c# - 为什么写入 24 位结构不是原子的(当写入 32 位结构时似乎是)?

我是一个修补匠——这一点毋庸置疑。出于这个原因(除此之外几乎没有其他原因),我最近做了一个小实验来证实我的怀疑,即写入struct不是原子操作,这意味着所谓的“不可变”值类型,它试图强制执行某些约束,假设可能无法实现其目标。我写了ablogpostaboutthis使用以下类型作为说明:structSolidStruct{publicSolidStruct(intvalue){X=Y=Z=value;}publicreadonlyintX;publicreadonlyintY;publicreadonlyintZ;}虽然上面的看起来像X!=Y或Y!=Z永远不可能为真的类型,在事实上,如

c# - 公共(public)静态字符串 MyFunc() 上的 "Expected class, delegate, enum, interface or struct"错误。什么 's an alternative to "字符串”?

当我尝试使用以下静态函数时出现错误。错误:Expectedclass,delegate,enum,interface,orstruct函数(和类):namespaceMyNamespace{publicclassMyClass{//SomeotherstaticmethodsthatuseClasses,delegates,enums,interfaces,orstructspublicstaticstringMyFunc(stringmyVar){stringmyText=myVar;//DosomestuffwithmyTextandmyVarreturnmyText;}}}这导致

c# - 为什么有些方法对可空结构的空值起作用而有些方法不起作用?

开门见山:int?i=null;i.ToString();//happyi.GetType();//nothappy我得到一个veryrelatedquestion这实际上是关于为什么i.ToString()工作正常。编辑:刚发现这个极端情况是themostvotedoneinthisSOthread! 最佳答案 是因为ToString是虚拟的,而GetType不是。Nullable在CLR中具有特殊的装箱行为。当您调用GetType在可为空的情况下,它被装箱(请参阅MSDN,实际上任何struct都会发生这种情况)。但是,对于可空