将List <string []>传递给接受string []作为参数</string []>的方法

时间:2013-11-20 08:06:16

标签: c# wpf methods parameter-passing

伙计我将一些参数传递给WPF应用程序的新窗口,如下所示

List<string[]> liststat = conf.getlistbytype(type);
if ((liststat == null) || (liststat.Count == 0))
{
    MessageBox.Show("There is no stat of that type in this stat server");
}
else
{
    CalculatedStat3 prompt = new CalculatedStat3(statwin, conf, liststat, this);
    prompt.Show();

然而,目标页面的构造是

 public CalculatedStat3(statwindow statwin, ConfigLayer conf, string[] statsname, CalculatedStat2 backscreen)
 {
 }

如果我收到错误

,我应该怎么做才能纠正这个问题
'RCCV_Version_2.CalculatedStat3.CalculatedStat3(RCCV_Version_2.statwindow, rmad_wpf_lib.ConfigLayer, string[], RCCV_Version_2.CalculatedStat2)' has some invalid arguments

5 个答案:

答案 0 :(得分:5)

第一个解决方案,只获取第一个数组

CalculatedStat3 prompt = new CalculatedStat3(statwin, conf, liststat.First(), this);

其次,展平你的收藏

var stats = liststat.SelectMany(x=>x).ToArray();
CalculatedStat3 prompt = new CalculatedStat3(statwin, conf, stats, this);

在第一个解决方案中,您将只获得第一组统计数据,在第二个解决方案中,您将获得大量连接的所有统计数据。我认为秒解决方案符合您的要求。

答案 1 :(得分:2)

目前还不清楚你想要为构造函数使用哪个string[],所以我只想采取第一个:

else
{
   string[] firstStat = liststat.First();
   CalculatedStat3 prompt = new CalculatedStat3(statwin, conf, firstStat, this);

如果您想创建多个CalculatedStat3

else
{
   CalculatedStat3[] allCalculatedStat3 = liststat
      .Select(s => new CalculatedStat3(statwin, conf, s, this))
      .ToArray();
   foreach(CalculatedStat3 stat in allCalculatedStat3)
       stat.Show();

答案 2 :(得分:1)

您还可以按如下方式连接所有数组:

List<string> finalList = new List<string>();

foreach (string[] strings in liststat)
    finalList.AddRange(strings);

string[] finalArray = finalList.ToArray();

然后将finalArray传递给方法。


这与daryal正在做的相同,只是没有LINQ。请随便。

答案 3 :(得分:0)

liststat是字符串数组的列表,而不是CalculatedStat3方法接受的单个字符串数组,这就是编译错误的原因。

传递列表的第一个元素

CalculatedStat3 prompt = new CalculatedStat3(statwin, conf, liststat[0], this);

或更改接受字符串数组列表的方法

public CalculatedStat3(statwindow statwin, ConfigLayer conf, List<string[]> statsname, CalculatedStat2 backscreen)

选择最适合您和您需求的解决方案。

答案 4 :(得分:0)

if ((liststat == null) || (liststat.Count == 0))
{
    MessageBox.Show("There is no stat of that type in this stat server");
}
else
{
    var list = new List<string>();
    liststat.ForEach(q => list.AddRange(q));
    CalculatedStat3 prompt = new CalculatedStat3(statwin, conf, list.ToArray(), this);
    prompt.Show();