草庐IT

基于体系结构的 C# 结构行为

我有一个问题,关于根据编译架构将多个结构输入一个方法,或关于正确布置Thread_Basic_Information结构,这样我就可以对相同的方法使用单个结构,而不管x64/x86(参见引用:https://msdn.microsoft.com/en-us/library/windows/desktop/ms684283(v=vs.85).aspx)我已经确认它在x86上工作正常,如果我手动切换结构,它也适用于x64。然而,我最近尝试改变我的方法,从仅仅复制粘贴大量函数到尝试回收我的代码。我很难找到关于所讨论结构的精确信息,我可以在C#中使用它来使其兼容,而不管x86/x64,或者根据

c# - 静态成员导致结构布局中的循环

publicstructMyStruct{staticMyStruct?myProperty;}尝试编译它会给我错误:结构成员“myStruct.myProperty”导致结构布局中出现循环。据我所知,当结构的实例包含自己的结构作为属性(这对我来说很有意义)时,通常会发生此错误。但在这里,它是关于static属性的,所以我看不出这样的递归是如何发生的。另外,该错误仅在声明Nullable结构时发生,声明静态非nullable是安全的。这里到底发生了什么会导致循环?编辑:我确实找到了我应该重复的问题;它解释了为什么当Instance有自己类型的成员时会发生递归,但这里是关于静态成员的。我

c# - IEnumerable<IMyInterface> 隐式来自 Class[] 但不是来自 Struct[]。为什么?

给定:publicinterfaceIMyInterface{}publicclassMyClass:IMyInterface{publicMyClass(){}}publicstructMyStruct:IMyInterface{privateint_myField;publicMyStruct(intmyField){_myField=myField;}}为什么我可以写:IEnumerablemyClassImps=new[]{newMyClass(),newMyClass(),newMyClass()};但不是:IEnumerablemyStructImps=new[]{newM

c# - 有理数结构的默认值

我正在为教育目的开发一个简单的数学库,我已经实现了一个代表RationalNumber的struct.显示结构核心字段的非常基本的代码是:publicstructRationalNumber{privatereadonlylongnumerator;privatereadonlylongdenominator;privateboolisDefinitelyCoprime;privatestaticRationalNumberzero=0;publicRationalNumber(longnumerator,longdenominator){this.numerator=numerato

c# - 我可以在结构上创建访问器以自动转换为其他数据类型或从其他数据类型转换吗?

是否可以做类似下面的事情:structtest{this{get{/*dosomething*/}set{/*dosomething*/}}}所以如果有人试图这样做,testtt=newtest();stringasd=tt;//interceptthisandthenreturnsomethingelse 最佳答案 从概念上讲,您想在此处执行的操作实际上可以在.NET和C#中执行,但您在语法方面找错了树。好像是implicitconversionoperator将是这里的解决方案,例子:structFoo{publicstatic

c# - 在传递给非托管代码之前固定一个可更新的结构?

我使用一些旧的API,需要将结构的指针传递给异步运行的非托管代码。换句话说,在我将结构指针传递给非托管代码后,非托管代码复制该指针并立即返回。非托管代码可以在另一个线程的后台访问该结构。我无法控制在另一个线程中运行的非托管代码,也无法控制线程本身。固定的{}语句不能用于固定,因为它不是为异步非托管固定而设计的。GCHandle只能固定引用,因此必须对结构进行装箱才能使用GCHandle。我试过了,它有效。它的主要问题是您无法从托管代码更新结构。要更新结构,首先我们需要将其拆箱,然后更新,然后再次装箱,但是......哎呀......再次装箱?!?这意味着内存中的前一个指针仍然指向旧的非

c# - 是否有结构继承的实用替代方案? (C#)

我正在编写代码来填充System.Windows.Documents中类的Margin、Padding和BorderThickness属性命名空间。这些属性中的每一个都接受System.Windows.Thickness形式的值,这是一个结构。但是,我希望将一些额外的数据与这些属性分配中的每一个关联起来,这些数据随后可能会被我的代码检索到。如果Thickness是一个类,我将从它继承并在子类中定义属性来存储我的附加数据项。但是因为它是一个结构,所以继承是不可能的。有没有什么实用的方法可以实现这一点,同时保持与我正在填充的属性的类型兼容性?谢谢你的想法,蒂姆

c# - 为什么受 'Enum' 约束的泛型类型在 C# 7.3 中不符合 'struct' 的条件?

如果我有一个带有struct约束的通用接口(interface),如下所示:publicinterfaceIStructwhereT:struct{}我可以像这样提供一个枚举作为我的类型T,因为enum满足struct约束:publicclassEnumIsAStruct:IStruct{}C#7.3添加了一个Enumconstraint.以下代码以前是非法的,现在可以编译:publicclassMCVE:IStructwhereT:struct,Enum{}然而,令我惊讶的是,以下代码无法编译:publicclassMCVE:IStructwhereT:Enum{}...有错误CS0

c# - 在结构中分配字段/属性

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:ModifyStructvariableinaDictionary为什么会这样MyStructtest=newMyStruct();test.Closed=true;效果很好,但是MyDictionary[key].Closed=true;在编译时显示“无法修改表达式,因为它不是变量”错误?为什么这两种情况下的分配不同?备注:MyDictionary类型为结构代码:publicstructMyStruct{//OthervariablespublicboolIsclosed;publicboolClosed{

C# 抽象结构

如何在C#中使用结构实现继承(或类似继承)?我知道抽象结构是不可能的,但我需要实现类似的目标。我需要它作为一个结构体,因为它必须是一个值类型。我需要继承,因为我需要一个通用数组和我可以保证的方法。我认为一个例子会有很长的路要走,所以这里有一些代码无法编译,但显示了我想要实现的目标;abstractstructVertex{abstractintSizeInBytes;abstractvoidSetPointers();}structColorVertex:Vertex{Vector3Position;Vector4Color;overrideintSizeInBytes//static