草庐IT

c# - 结构的私有(private)字段值未使用异步方法更新

我刚刚在结构中使用异步方法时遇到了一个奇怪的行为。有人可以解释为什么会发生这种情况,最重要的是是否有解决方法?为了演示问题,这里有一个简单的测试结构publicstructStructure{privateint_Value;publicStructure(intiValue){_Value=iValue;}publicvoidChange(intiValue){_Value=iValue;}publicasyncTaskChangeAsync(intiValue){awaitTask.Delay(1);_Value=iValue;}}现在,让我们使用该结构并进行以下调用varsIns

c# - 在 C# 中使用 Marshal.StructureToPtr 将结构传递给 C++ API

我在我的代码中使用用C++编写的API(用C#编写)。API需要一个参数作为指向结构的指针。该结构由“Int”和Char数组组成:例如unsafepublicstructToBePassed{Int32Num1;Int32Num2;Char[]Data;//orfixedCharData[255];}我不能直接将结构指针传递给API,因为在那种情况下,我会收到“指针无法引用编码(marshal)结构”的错误。代码编译成功,但是当我执行(调试)代码时出现此错误。现在我有两个选择:第一:-通过引用传递结构:我想问一下,当我通过引用传递结构时,需要结构指针的API是否可以接收地址。请注意,A

c# - 这里发生了什么?没有默认构造函数时如何调用?

给定以下代码:publicstructFoo{publicFoo(intbar,intbaz):this(){Bar=bar;//Err1,2Baz=baz;//Err3}publicintBar{get;privateset;}publicintBaz{get;privateset;}}:this()实际上做了什么?没有默认构造函数,那么它在调用什么?没有这个附录,整个事情就会因错误而崩溃。Error1The'this'objectcannotbeusedbeforeallofitsfieldsareassignedtoError2Backingfieldforautomatical

c# - 属性、索引器或动态成员访问不能作为 out 或 ref 参数传递

这个问题在这里已经有了答案:C#propertyandrefparameter,whynosugar?(9个回答)Apropertyorindexermaynotbepassedasanoutorrefparameter(9个回答)关闭9年前。您好,我无法弄清楚这一点。我有这些结构和类。structCircle{...}classPainting{Listcircles;publicListcircles{get{returncircles;}}}我正在尝试使用以下代码从绘画类外部修改其中一个圆圈:MutatePosition(refpainting.Circles[mutationI

c# - 从结构继承

我想弄清楚我的代码有什么问题。我有这段代码:publicstructMyStructA{publicMyStructA(stringstr){myString=str;}publicstringmyString;}publicstructMyStructB:MyStructA{publicstringmyReversString;}我得到这个错误:Erroratcompiletime:Type'MyStructA'ininterfacelistisnotaninterface我不明白为什么?.net不像类那样实现结构? 最佳答案 结

c# - 长生命周期对象的结构与类

当您需要非常小的对象时,比如包含2个float属性,并且您将拥有数百万个不会立即被“销毁”的对象,结构是更好的选择还是类?就像在作为库的xna中,有point3s等作为结构,但如果您需要长时间保留这些值,它会不会对性能造成威胁? 最佳答案 与大多数关于结构的问题相反,这实际上似乎是对结构的一个很好的使用。如果它包含的数据是值类型,并且您将使用其中的大量数据,那么结构会很有效。一些提示:::结构不应大于16字节,否则将失去性能优势。::使结构不可变。这使用法更加清晰。例子:publicstructPoint3D{publicfloat

c# - 对您来说它看起来像 C# 错误吗?

这个问题在这里已经有了答案:MaybeaC#compilerbuginVisualStudio2015(3个答案)关闭6年前。创建一个控制台应用程序来重现:structTest{publicstaticreadonlyTest?Null=null;}classProgram{staticvoidMain(string[]args){vart=Test.Null;}}它是可编译的,但我们在运行时会有以下内容:Anunhandledexceptionoftype'System.TypeLoadException'occurredinmscorlib.dll.Additionalinform

c# - 为什么 System.Windows.Point 和 System.Windows.Vector 是可变的?

鉴于可变结构通常被认为是邪恶的(例如Whyaremutablestructs“evil”?),是否有潜在的好处可能促使.NET框架的设计者制作System.Windows.Point&System.Windows.Vector可变?我想了解这一点,以便我可以决定让我自己的类似结构可变(如果有的话)是否有意义。使Point和Vector可变的决定可能只是判断错误,但如果有充分的理由(例如,性能优势),我想了解它是什么。我知道我在Vector.Normalize()方法的实现上被绊倒了几次,因为令人惊讶的是(!),它没有返回一个新的Vector。它只是改变了电流矢量。我一直认为它应该是这样

c# - 如何使结构不可变?

在StackOverflow和互联网上,我发现保持结构不可变是一个很好的设计原则。不幸的是,我从未见过任何实际导致这些结构真正不可变的实现。假设一个结构内部没有任何引用类型,我该如何真正使结构不可变?也就是说,我如何防止其任何原始字段发生突变(可能通过编译时/运行时异常)?我写了一个简单的测试,试图使结构不可变,但即使使用System.ComponentModel.ImmutableObjectAttribute也不起作用:classProgram{staticvoidMain(string[]args){ImmutableStructimmStruct1=newImmutableSt

C# - 值类型等于方法 - 为什么编译器使用反射?

我刚刚遇到了一些对我来说很奇怪的事情:当你在一个值类型上使用Equals()方法时(当然,如果这个方法没有被覆盖)你会得到一些非常非常慢-使用反射对字段进行一对一比较!如:publicstructMyStruct{inti;}(...)MyStructs,t;s.i=0;t.i=1;if(s.Equals(t))/*s.iwillbecomparedtot.iviareflectionhere.*/(...)我的问题:为什么C#编译器不生成比较值类型的简单方法?类似于(在MyStruct的定义中):publicoverrideboolEquals(Objecto){if(this.i=