Tag: struct

我应该为我的Linq2Sql数据使用Struct而不是轻量级数据类吗?

我经常使用linq2sql生成的类,并创建一个简单的仅数据类 public class myentity { public Guid id { get; set; } public string name { get; set; } // etc } 我没有把方法放在这些类中,我主要使用它们作为帮助类,所以我可以很容易地序列化到/从json和其他类似的操作。 我的问题是,在这种情况下我应该使用结构而不是类吗? 将它作为一个结构或多或少的结构定义似乎是有意义的,但我不知道这里的性能是否理想,因为我经常将类从方法传递给方法而我不想要一个大量的副本,因为结构是价值类型。 我经常做的另一件事是使用Linq2Sql的延迟执行来返回我自己的Linq2Sql类的轻量级版本,而不是它们生成的那个。 我不完全确定使用结构而不是类会在这里产生一些不利的性能影响。 我如何使用延迟执行的一个例子是这样的 public IEnumerable getEntities() { return from me in MyEntity return new myentity() { id = me.id, name = me.name }; } public IEnumerable getEntitiesThatStartWith(string s) { return […]

从c ++到C#的3D矢量结构

我正在尝试将我的引擎中的一些function从c ++移植到C#。 我使用非托管c ++编译我的引擎作为dll,并且只在C#包装器中使用extern“C”函数。 我有各种函数,可以获取并返回Vector3df 。 这被定义为 typedef Vector3d Vector3df; 而f32实际上是一个float 。 该类本身只有一些名为xy和z的成员以及许多方法。 我可以用C#重写整个课程,这不是问题,但无论如何,2可以匹配吗? 我们来举例说明以下函数: extern “C” void SetColor(Vector3df color) extern “C” Vector3df GetColor() 我希望在C#中有这样的东西: [DllImport(“Engine.dll”, EntryPoint = “SetColor”, CallingConvention = CallingConvention.Cdecl)] static extern void SetColor(Vector3df color); [DllImport(“Engine.dll”, EntryPoint = “GetColor”, CallingConvention = CallingConvention.Cdecl)] static extern Vector3df GetColor(); 无论如何,我可以使代码类似于这项工作吗? 请注意,我绝不是C#guru。我在编组方面失败了。 我主要是为了制作我的游戏的地图编辑器而不必学习Qt或wxWidgets。 谢谢!

C#pinvoke结构使用union和数组

我没有定义正确的C#代码来使用C ++库,它定义了一个带有union和数组的复杂结构,我在执行C ++代码时不断得到一些内存exception,我很确定它是由于这个原因。 c ++结构如下,忽略枚举和其他结构定义(如果需要,我会发布它们,但它们非常简洁) typedef struct { DG_CCTALK_APP_EVT_CODE eEventCode; DG_CCTALK_APP_EVT_TYPE eEventType; int iTime; int iHandle; unsigned char uchAddress; DG_CCTALK_BILL_INFO sBillInfo; int iBillAmount; union { long lData; int iData; unsigned char ucArray[128]; char *cString; void *pvoid; } uData; void *_private; // for use by cctalk app layer } DG_CCTALK_APP_EVT, *PDG_CCTALK_APP_EVT; 而C#代码是这样的: [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Explicit)] public struct Anonymous_92d21a81_2a8b_42f4_af32_f7606aa9cf40 […]

为C6结构暴露了C#struct for VB6 app

最后更新时间: 2009-08-11美国东部时间下午2:30 几天前,我发布了一些关于一些非常奇怪的问题的问题。 好吧,我弄清楚具体是什么导致一台机器上的构建不能在其他机器上运行,甚至想出一个解决方法,但现在它给我留下了一个很好的,具体的问题:为什么? 为了重现这个问题,我创建了一个新的InteropUserControl并执行以下操作: 添加一个新的public struct MyStruct : 给它一个GUID和ComVisible属性 将GetMyStruct成员添加到_InteropUserControl接口并在InteropUserControl实现它。 MyStruct : [Guid(“49E803EC-BED9-4a08-B42B-E0499864A169”)] [ComVisible(true)] public struct MyStruct { public int mynumber; } _InteropUserControl.GetMyStruct() : [DispId(7)] void getMyStruct( int num, ref MyStruct data ); (我已经尝试返回MyStruct而不是通过引用传递。) InteropUserControl.GetMyStruct()实现: public void getMyStruct( int num, ref MyStruct data ) { data = new MyStruct(); data.mynumber = num * 2; […]

为什么System.Int32是struct而System.String是类

从我开始进行c#编程的角度来看,这在我脑海中确实是一个问题。 为什么int是struct类型 而string是class类型

在C#中为数组分配新结构时会发生什么?

假设我有一个C#结构: struct Foo{ int mA; public int A {get {return mA;}} int mB; public int B {get {return mB;}} public Foo(int a, int b) { mA = a; mB = b; } } 然后我创建了Foo的数组: Foo[] foos = new Foo[10]; 我这样做会发生什么? foos[1] = new Foo(20, 10); 如果Foo是一个类,Foo []会在堆上保存一个指向Foo对象的指针,并且该指针将被更改为新的Foo对象(旧的对象被留下来进行回收)。 但由于结构是值类型,新的Foo(20,10)是否会物理覆盖以前由foos [1]持有的相同内存位置?

固定大小的结构类型数组

如何在C#中声明结构类型的固定大小数组: [StructLayout(LayoutKind.Sequential,Pack=1), Serializable] public unsafe struct MyStruct{ … } public class MyClass { … public fixed MyStruct myStruct[256]; } 这将导致CS1663:不允许使用结构类型的固定大小缓冲区,我该如何解决这个问题?我不喜欢使用C#或“托管集合数据结构”类型,因为我需要经常将其编译为本机C ++

这个C#结构的大小是多少?

存储在List时是12个字节还是16个字节? public struct DataPoint { DateTime time_utc; float value; } C#中有任何sizeof函数吗?

如何将结构从C#发送到VB6,从VB6发送到C#?

我需要将一个结构从C#发送到VB6应用程序,修改VB6中的数据,然后通过Windows消息传递结果。 我该怎么做呢? 我能够使用PostMessage来回发送基本的int(在C#中使用DllImport并使用Windows消息传递注册vb6应用程序),但需要发送更多结构化数据,包括字符串,整数和小数。 寻找最简单的解决方案来实现来回传递结构数据。 VB6类型的基本样本 Public Type udtSessionData SessionID As Integer SessionName As String MinVal As Currency PctComplete As Double NVal As Integer ProcessedFlag As Boolean ProcessedDate As Date Length As Integer End Type

在C#中Foreach结构奇怪的编译错误

namespace MyNamespace { public struct MyStruct { public string MyString; public int MyInt; public bool MyBool; } public class MyClass { private List MyPrivateVariable; public List MyVariable { get { if (MyPrivateVariable == null) { MyPrivateVariable = new List(); MyPrivateVariable.Add(new MyStruct()); MyPrivateVariable.Add(new MyStruct()); } return MyPrivateVariable; } } public void MyLoop() { foreach (MyStruct ms […]