C#我的ArrayList只包含最后一个项目
问题描述:
我在C#Visual Studio中有以下代码。我试图通过COM服务器使用MATLAB绘制数据。我能够做到这一点,但有了我的代码,MATLAB输出控制台只显示变量“数字”的最后一个值,当它绘制时,它将覆盖所有以前的值。另外,我如何制作可变大小的动态数据呢?我的目标是实时绘制数据。任何建议,将不胜感激!C#我的ArrayList只包含最后一个项目
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
////// Create the MATLAB instance
MLApp.MLApp matlab = new MLApp.MLApp();
for (int j = 1; j <= 10; j++)
{
int[] numbers = new int[11];
numbers[j] = j * 15;
matlab.Execute("numbers");
matlab.PutWorkspaceData("A", "base",numbers);
matlab.Execute("plot(A);");
}
// //Console.WriteLine(j*15);
//}
//Console.ReadKey();
}
}
}
UPDATE:
var numbers = new List<int>();
for (int j = 1; j <= 10; j++)
{
//numbers[j] = j * 15;
int val= j * 15;
numbers.Add(val);
var array = numbers.ToArray();
matlab.Execute("array");
matlab.PutWorkspaceData("A", "base", array);
matlab.Execute("plot(A);");
}
答
不要初始化numbers
内循环。这会每次创建一个新实例。
试试这个:
int[] numbers = new int[11];
for (int j = 1; j <= 10; j++){
numbers[j] = j * 15;
//double vIn = Convert.ToDouble(numbers);
matlab.Execute("numbers");
matlab.PutWorkspaceData("A", "base",numbers);
matlab.Execute("plot(A);");
}
UPDATE:
进行动态大小的数组。使用List<>
。 然后,你必须改变环路这样的:
List<int> numbers = new List<int>();
for (int j = 1; j <= 10; j++){
int val = j * 15;
numbers.Add(val);
....
}
答
必须的前移到这一行 int[] numbers = new int[11];
for循环
,并将其放置后
'MLApp.MLApp matlab = new MLApp.MLApp();'
+0
它的工作!非常感谢。我在C#中第一次编码,所以它是一个很大的学习曲线。 – DashD
是@ Sabi3023已经提供的解。你会碰巧知道如何在这一行中使数组大小为任意或动态: int [] numbers = new int [11];即。将11更改为动态值 – DashD
@DashD,请参阅更新回答 – Sajal
是的,我之前曾尝试过这种方法,但它会导致错误。 – DashD