Tag: 数组

C#List size vs double size

所以我只是从微软测试CLR Profiler ,我做了一个小程序,创建了一个包含1,000,000双打的List。 我检查了堆,结果列表大小大约是124KB(我不记得确切,但它就在那附近)。 这真的震撼了我的世界,如果它有100万双打,它怎么可能是124KB? 无论如何,在那之后我决定检查双倍[1000000]。 令我惊讶的是(不是因为这是我对List = P的预期),数组大小为7.6MB。 巨大的差异!! 他们怎么会有所不同? List 如何管理其项目(令人难以置信)内存效率如何? 我的意思是,它不像其他7.5 MB的其他地方,因为在我创建了100万双打之后,应用程序的大小大约增加了3或4 KB。

索引超出了数组的范围(C#)

我在这一行得到“索引超出数组的范围”,这有什么不对? Kort[x, y] = Sort[x] + Valor[y] + ” “; 以下是完整的代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace uppgift_13 { public partial class Form1 : Form { string[,] Kort = new string[4,13]; string[] Valor = new string[13]; string[] Sort = new string[4]; int x, y; […]

C#StructLayout / FieldOffset和数组索引

我在使用FieldOffset时遇到了一些问题。 下面的代码是一个例子,它对我不起作用: [StructLayout(LayoutKind.Explicit)] public struct IndexStruct { [FieldOffset(0)] public byte[] data; [FieldOffset(0)] public short[] idx16; [FieldOffset(0)] public int[] idx32; } 例如,如果我将名为“data”的数组设置为序列化字节数组,然后尝试使用“idx16”字段将数据检索为short,则索引仍然作为byte []对齐。 这意味着idx16 1获取数据中的第二个字节,而不是第二个16位字(字节2和3)。 如果我执行逆I索引短路而不是字节,这意味着偏移对齐是从源数据inheritance的。 我的问题是,有办法解决这个问题吗? 我知道我可以通过乘以元素的大小来补偿索引值,但还有另一种方法吗? 这是我在StackOverflow上找到的答案,但是当尝试该代码时,结果certificate它无法正常工作。 使用以下代码在VS中使用unit testing尝试使用它,但没有成功: [TestMethod()] public void SumTest() { float[] fArr = {2.0f, 0.5f, 0.0f, 1.0f}; MemoryStream ms = new MemoryStream(); for (int i = 0; i < fArr.Length; […]

如何在C#中将值类型转换为byte ?

我想做相当于这个: byte[] byteArray; enum commands : byte {one, two}; commands content = one; byteArray = (byte*)&content; 是的,它现在是一个字节,但考虑我将来要改变它? 如何让byteArray包含内容? (我不在乎复制它)。

将多维数组元素转换为不同的类型

假设我有这个多维数组: float[][,] vertices = { new float[,]{ {0f, 1.28f}, {1.28f, 2.56f}, {3.84f, 2.56f}, {5.12f, 1.28f}, {3.84f, 0f}, {1.28f, 0f}, {0f, 1.28f} }, new float[,]{ {0f, 3.83f}, {1.27f, 5.12f}, {3.87f, 5.12f}, {5.12f, 3.83f}, {5.12f, 1.26f}, {3.87f, 0f}, {1.27f, 0f}, {0f, 1.26f}, {0f, 3.83f} } }; 现在,我想将每个子数组转换为Vector2[]类型的数组,其中Vector2是一个公共类, Vector2包含x和y属性: public class Vector2 { public float x; public float […]

迭代2维数组c#

for(int k=0;k <= odds.GetLength(-1);k++) 上面的代码行应该迭代Double类型的二维数组,但不断抛出以下exception。 索引超出范围exception。 有人会善意解释原因并提供解决方案。 非常感谢。

将数组的值分配给一行中的变量

我可以将数组中的每个值分配给C#中的一行中的变量吗? 这是Ruby代码中我想要的一个例子: irb(main):001:0> str1, str2 = [“hey”, “now”] => [“hey”, “now”] irb(main):002:0> str1 => “hey” irb(main):003:0> str2 => “now” 我不确定我在C#中是否可能需要什么。 编辑:对于那些暗示我只是将字符串“嘿”和“现在”分配给变量的人,这不是我想要的。 想象一下: irb(main):004:0> val1, val2 = get_two_values() => [“hey”, “now”] irb(main):005:0> val1 => “hey” irb(main):006:0> val2 => “now” 现在get_two_values方法返回字符串“hey”和“now”的事实是任意的。 实际上它可以返回任何两个值,它们甚至不必是字符串。

数组中成员的默认值是多少?

我像这样实例化一个数组: int array[] = new int[4]; 这四个成员的默认值是什么? 它是null,0还是不存在?

C#中字符串集合的排列

好像我再次陷入递归算法…… 我的应用程序应该根据用户指定的信息并根据由以下字符串表示的子文件夹结构将文件排序到不同的文件夹: [ROOT] \ brand \ color \ material \ 结构字符串中的标记表示集合: 假设: var brand = new List { “Nike”, “Adidas”, “Reebok” }; var color = new List { “red”, “blue”, “yellow”, “black” }; var material = new List { “leather”, “fabric” }; var data = new List<List>() { brand, color, material }; 而我想要得到的是: [ROOT]\Nike\red\leather [ROOT]\Nike\red\fabric […]

c#linq从linq返回一个多维数组

我想返回一个多维数组来保存在一个会话中,但不知道如何从linq返回它: public string[] GetCountryAndManufacturerForUser(int userId) { var array = (from xx in _er.UserRoles join xy in _er.Countries on xx.CountryId equals xy.Id join xz in _er.Manufacturers on xx.ManufacturerId equals xz.Id where xx.UserId == userId select new { xy.Name, xz.Description }).ToArray(); return?? } 我知道我在这里做错了,不知道是什么。 编辑: 需要返回以下字段 – xy.Name,xz.Description 喜欢: { “1”, “aaa” }, { “2”, “bbb” } […]