Tag: 结构

如何指定派生结构的默认状态应该在C#中?

我已经看到了关于不能使用无参数构造函数或不设置字段初始化器的SO的不同问题,但我认为我的问题远远超出了这一点。 我想知道的是,我将如何设置我需要定义的结构的“默认”值? 假设我正在制作TaxID结构,无论出于何种原因,默认值都需要为999-99-9999。 这已经在.NET中的其他结构中完成,即DateTime。 每当您声明DateTime时,该值立即设置为Jan 1 0001 12:00 AM。 为什么它设置为此值而不是0/0/0000 00:00:0000 AM? 必须在幕后发生一些事情,使得这个值实际上在它的“默认”上变得“有意义”,即使考虑到c#对结构的限制。

如何确定Type是否为struct?

给定一个具有Type属性的PropertyInfo实例,如何确定它是否为struct? 我发现有一些属性,如IsPrimitive , IsInterface等,但我不知道如何要求结构? 编辑:澄清问题。 假设我有一个方法: public Boolean Check(PropertyInfo pi) { return pi.Type.IsStruct; } 我怎么写而不是IsStruct ?

编组C#结构

我试图序列化以下c#结构: [Serializable] [StructLayout(LayoutKind.Sequential, Size = 70, CharSet = CharSet.Ansi)] public struct USSDContinueModel { [MarshalAs(UnmanagedType.U4)] public uint Command_Length; [MarshalAs(UnmanagedType.U4)] public uint Command_ID; [MarshalAs(UnmanagedType.U4)] public uint Command_Status; [MarshalAs(UnmanagedType.U4)] public uint Sender_ID; [MarshalAs(UnmanagedType.U4)] public uint Receiver_ID; [MarshalAs(UnmanagedType.U1)] public uint Ussd_Version; [MarshalAs(UnmanagedType.U1)] public uint Ussd_Op_Type; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21)] public string MsIsdn; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21)] public string Service_Code; […]

C#结构 – 从外部库访问类

关于构建我的应用程序的正确方法,我有一个问题。 我是C#的初学者,所以如果我有一些基础缺失的借口。 我在网上看了(不仅是stackoverflow),但没有找到任何答案,所以也许这只是因为我做错了什么? 我有一个项目,其中有几个类来定义我的对象。 Object1.class.cs Object2.class.cs …… 现在,对于某些函数,我创建了类库(.dll文件)来外部化代码。 我的想法是,如果我需要进行更新,我只需要替换.dll文件,而不是所有代码。 但是当我想将对象发送到该类时遇到问题,我认为因为它们是解决方案的外部因素? 所以我开始怀疑我是否正确地做到了。 1)有没有办法将项目中的对象发送到我单独创建的类? 2)以这种方式工作是一个好主意吗? 我的意思是,我当然可以在我的项目中添加库,但在这种情况下,我将不会分离.dll文件,并且所有文件都在一个.exe文件中。 3)当我需要测试我的课程时,我总是需要关闭我的项目,打开课程进行编辑,然后回到我的项目进行测试。 有更简单的方法吗? 提前感谢您的建议 编辑2。 Simone Cifani perfercly回答了我的问题: 1)课程必须外化 2)在我的外部库中添加对必要类的引用 3)在我的主项目中添加对每个类和外部库的引用 由于我不知道如何使用Interfaces,我会在没有它的情况下使用它,但我认为即使没有它也会很好。

.NET自定义结构类型的内存开销是多少?

有一个与.NET对象相关的固定开销,在这个问题中有更全面的概述: .NET对象的内存开销是12或24字节,具体取决于你是在32位还是64位进程。 也就是说,像int, double, boolean等基本值类型不会产生开销,因为它们是值类型 。 在您的应用程序中放置自定义struct类型的位置在哪里? 一方面,它们是值类型,如上面的int, double, boolean [所以不应该产生开销],但另一方面它们间接地从System.Object派生,因此(技术上)应该产生开销。

结构类型数组的性能

例: // Potentially large struct. struct Foo { public int A; public int B; // etc. } Foo[] arr = new Foo[100]; 如果Foo是100字节结构,则在执行以下语句期间将在内存中复制多少字节: int x = arr[0].A 也就是说,将arr [0]计算为某个临时变量(Foo实例的100字节副本),然后将.A复制到变量x(4字节副本)。 或者是编译器,JITer和CLR的某种组合能够优化此语句,以便将A的4个字节直接复制到x 。 如果执行优化,当项目保存在List或者数组作为IList或ArraySegment传递时,它是否仍然成立?

C#,从二进制文件中读取结构

我想从二进制文件中读取结构。 在C ++中,我会这样做: stream.read((char*)&someStruct, sizeof(someStruct)); 在C#中是否有类似的方式? BinaryReader仅适用于内置类型。 在.NET 4中有一个MemoryMappedViewAccessor。 它提供了类似Read ,这似乎是我想要的,除了我手动必须跟踪我想要读取的文件中的位置。 有没有更好的办法?

可变结构与类?

我不确定是使用可变结构还是可变类。 我的程序存储了一个包含大量对象的数组。 我注意到使用类会使所需的内存量翻倍。 但是,我希望对象是可变的,并且我被告知使用可变结构是邪恶的。 这就是我的类型: struct /* or class */ Block { public byte ID; public bool HasMetaData; // not sure whether HasMetaData == false or // MetaData == null is faster, might remove this public BlockMetaData MetaData; // BlockMetaData is always a class reference } 像这样分配大量的对象(注意下面的两个代码都运行了81次): // struct Block[,,] blocks = new Block[16, 256, […]

在Windows窗体应用程序中永远循环

我正在使用Visual C#sand我使用的是Windows窗体而不是控制台应用程序。 因此,我不是在Main()中工作,而是在Form File中工作。 我对C#也很陌生,很抱歉,如果我的一些问题是愚蠢的。 我基本上需要做的是当我的程序启动时我需要它来永远循环。 由于我没有Main(),我会把这段代码放在哪里? 我把它放在具有InitializeComponent()的函数中吗? 我需要在程序启动后立即启动循环。 但是,我需要在循环之前首先声明一些变量。 所以基本上我需要声明变量然后开始无限循环。 变量是全局的。 其次,当用户按下按钮时,我需要无限循环中断。 我该怎么办? 我正在考虑以下几点: while (buttonIsPressed == false) { //do whatever I need to do } 但是,我意识到按钮的function永远不会被调用,因为我被困在那个循环中。 如果由于处于无限循环中而从未到达按钮的function,我无法从按钮的function设置变量。 有任何想法吗? 我正在考虑线程,但我绝对没有线程经验,所以有点不愿意尝试它。 另外,来自评论: 聊天应用程序。 程序启动时我需要它继续听。 但是,当用户单击“连接”时,它会停止侦听,而是启动连接 我正在创建一个聊天客户端。 所以基本上当我的程序启动时,我需要它继续听。 但是,当用户单击“连接”时,它需要停止侦听,而是启动连接

类VS ref Struct

我正在使用C#编写游戏,因此,我非常关注性能。 我想知道主要区别是什么,如果可能的话,使用Class传递数据或通过引用传递的struct的性能考虑因素。 出于性能原因,我希望不要复制数据(我假设通过ref传递比这里的值快得多)。 我知道一个类总是通过引用传递,并且结构是通过值传递的,但我在谈论通过引用传递结构。 我希望传递的数据示例: public delegate void PathCompleteDelegate(List path); public struct PathFinderJob{ public PathCompleteDelegate callback; public Vector3 start, end; public PathSize unitSize; public BoxCollider boxCollider; } 在前面的例子中,使用类会有所作为吗? 如果是这样,差异会是什么? 在这个例子中,一个类是否比结构更快? 为什么? 谢谢。 若昂卡洛斯