Tag: 数组

什么更有效:List .Add()或System.Array.Resize()?

我正在尝试确定List.Add()与使用Array.Resize()方法相比更有效。 Array.Resize的文档说它会复制整个数组,并将其放入一个新对象中。 必须丢弃旧对象。 这个旧对象在哪里? 在堆栈或堆上? 我不知道List.Add()是如何工作的。 有谁知道List.Add方法如何与静态Array.Resize方法进行比较? 我对内存使用(和清理)感兴趣,对于300种值类型更好,而不是20,000种值类型。 对于它的价值,我计划在.NET的嵌入式版本之一上运行此代码。 可能是.NET Gadgeteer

设置Array的Length属性

是否可以使用某种技术更改数组的Length属性? 我需要将数组的前x个成员传递给方法。 项目要求阻止我分配任何堆分配,因此我不能使用任何Array.Resize()或创建新数组。 此外, 我无法更改SetVertices代码,因为它属于另一个库。 它需要V[] 。 我无法将IList或V*传递给它。 public void BuildIt(V[] verts,int x){ verts.Length = x; //Compile error mesh.SetVertices(verts); } 当然代码不会编译。 我需要一些像reflection或扩展方法这样的技术来将数组伪装成更小而不实际创建更小的数组。 我希望SetVertices()方法认为数组有x个成员,即使它有更多。 编辑: 测试了以下方法,它们不起作用: stackalloc不起作用,因为它不会创建(或者我无法获得)真正的数组。 窥视单项目我发现数组的Length属性调用GetLenght()和GetRank()方法来确定长度。 抛开一个不好的做法,我不能用扩展方法覆盖这个方法,因为实例方法优先于扩展方法(或者有没有办法强制使用?)。 接下来会尝试代码注入。 EDIT2: 试图将代码发送到Array.GetLength()和Array.Length 。 似乎没有简单,可靠,跨平台和干净的方法来在运行时更改现有的方法体。

使用LINQ获取二维数组的最小值和最大值

你如何使用LINQ获得二维数组的最小值和最大值? 要清楚,我的意思是数组中所有项目的最小值/最大值(不是特定维度的最小值/最大值)。 或者我只是要以老式的方式循环?

将BYTE数组转换为INT

我有这种代码 static void Main(string[] args) { byte[] array = new byte[2] { 0x00, 0x1f }; Console.WriteLine(BitConverter.ToInt32(array, 0)); } 但它不起作用。 它引发了一个例外: 目标数组不够长,无法复制集合中的所有项目。 检查数组索引和长度。 怎么了?

C#语法通过数组中的构造函数params初始化自定义类/对象?

我有一个至少有4个变量的类,我已经为类创建了一个构造函数,以便我可以使用它进行初始化 MyClass testobj = new MyClass(1234,56789,”test text”, “something else”, “foo”); 工作良好。 然后我有一个这样的数组,我需要在循环中解析,所以我想在这个数组中得到一些静态数据。 我的方法是: MyClass[] testobjlist = new MyClass { new MyClass(1001,1234,”Text 1″, “abcdefghijklm”, “ding”), new MyClass(1002,2345,”Text xx”, “bla bla”, “dong”), new MyClass(1003,8653,”Text yy”, “blah blah even more”, “bamm!”) } 但不知怎的,这给了我一个奇怪的错误,我需要额外的} ??? 我不知道如果我应该提到这个,但是我使用Razor-engine 2将它用于网页。但我认为这是一个普通的C#问题? 我的解决方法是使用一个大小初始化数组,然后通过索引逐个添加元素,但我宁愿优先使用上面的解决方案,因为我可能需要在测试时按顺序上下移动项目,我有很多真实数据中超过3个。 想知道我在上面的代码中缺少什么……?

如何添加到数组C#的结尾?

如何在引用类的ArrayList末尾的Windows窗体上的TextBox和Button中添加新item ? private product[] value = new product[4]; value[1] = new product(“One”,5) value[2] = new product(“Two”,3) value[3] = new product(“Three”,8) 工作流程 在textbox1 , textbox2 , textbox3输入新产品详细信息 当我单击Add ,新产品将添加到数组中: value[1] = new product(“One”,5) value[2] = new product(“Two”,3) value[3] = new product(“Three”,8) value[4] = new product(“Four”,2) 这样做的代码是什么?

将linq查询转换为字符串数组 – C#

将单列linq查询转换为字符串数组的最有效方法是什么? private string[] WordList() { DataContext db = new DataContext(); var list = from x in db.Words orderby x.Word ascending select new { x.Word }; // return string array here } 注 – x.Word是一个字符串

如何在C#中扩展数组

我必须使用数组进行练习。 用户必须输入3个输入(每次输入有关项目的信息),输入将插入到数组中。 然后我必须显示数组。 但是,我很难在不改变其中的信息的情况下增加arrays的长度; 以及如何允许用户输入另一组输入? 这是我到目前为止: public string stockNum; public string itemName; public string price; string[] items = new string[3]; public string [] addItem(string[] items) { System.Console.WriteLine(“Please Sir Enter the stock number”); stockNum = Console.ReadLine(); items.SetValue(stockNum, 0); System.Console.WriteLine(“Please Sir Enter the price”); price = Console.ReadLine(); items.SetValue(price, 1); System.Console.WriteLine(“Please Sir Enter the item name”); itemName = […]

如何在C#中对数组执行set减法?

给定C#中的两个数组,执行set减法的最简单方法是什么? 显然,这在Ruby中很容易实现。 基本上我只想删除数组b中的数组b中的元素: string[] a = new string[] { “one”, “two”, “three”, “four” }; string[] b = new string[] { “two”, “four”, “six” }; string[] c = a – b; // not valid c应该等于{ “one”, “three” } 。 b – a会产生{ “six” } 。

按属性排序列表,然后按另一个排序

我有一个包含两个数据点的示例类: public enum Sort { First, Second, Third, Fourth } public class MyClass { public MyClass(Sort sort, string name) { this.Sort = sort; this.Name = name; } public Sort Sort { get; set; } public string Name { get; set; } } 我希望通过他们的Sort属性将它们分组,然后按字母顺序排列这些组。 List list = new List() { new MyClass(MyClass.Sort.Third, “B”), new MyClass(MyClass.Sort.First, “D”), […]