C#转换帮助&;PHP

C#转换帮助&;PHP,c#,php,C#,Php,我在将数组从php转换为c#时遇到另一个问题 这就是我所拥有的: public Dictionary<int, List<string>> waddlesById = new Dictionary<int, List<string>>(); 等于-1,但在c中做时: 等于0。 这是我的构造函数: string maxSeats = String.Empty; foreach (int waddleId in sledRac

我在将数组从php转换为c#时遇到另一个问题

这就是我所拥有的:

public Dictionary<int, List<string>> waddlesById = new Dictionary<int, List<string>>();
等于-1,但在c中做时:

等于0。 这是我的构造函数:

string maxSeats = String.Empty;
            foreach (int waddleId in sledRacing)
            {
                switch (waddleId)
                {
                    case 103:
                    case 102:
                        maxSeats = ",";
                        break;

                    case 101:
                        maxSeats = ",,";
                        break;

                    case 100:
                        maxSeats = ",,,";
                        break;
                }
                if (waddlesById.ContainsKey(waddleId))
                {
                    waddlesById[waddleId].Add(maxSeats);
                }
                else
                {
                    List<string> newInner = new List<string>();
                    newInner.Add(maxSeats);
                    waddlesById.Add(waddleId, newInner);
                }
            }
string maxSeats=string.Empty;
foreach(雪橇比赛中的int waddleId)
{
开关(waddleId)
{
案例103:
案例102:
maxSeats=“,”;
打破
案例101:
maxSeats=“,”;
打破
案例100:
maxSeats=“,”;
打破
}
if(waddlesById.ContainsKey(waddleId))
{
waddlesById[waddleId].Add(maxSeats);
}
其他的
{
List newInner=新列表();
添加(maxSeats);
waddlesById.Add(waddleId,newInner);
}
}

感谢您的帮助。Count将自动创建条目。改用waddlesById.ContainsKey(waddleId):

我认为你在C#中混淆了列表和数组@Simon Witehead是对的,您可能需要重新思考C#习惯用法中的代码。同时,它提醒了我这种类型(我相信不是那么广为人知),我想我会尝试(希望)以某种有用的方式回答你们的问题

在此之前,让我先澄清一件事:我假设您正在尝试使用以下代码创建一个数组:

maxSeats = ",,,";
如果这是正确的,那么下面是如何创建包含三个元素的数组:

var myArray = new string[3];
// or similar to your PHP code
var myArray = new string[] { "", "", "" };
至于查找示例,我认为它提供了一种更为C#惯用的方式来完成这类任务:

var sledRacing = new[] { 100, 102, 103, 100, 100, 102, 101 };

var lu = sledRacing.ToLookup(
        k => k,
        k => k == 100 ? new string[3] : (k == 101 ? new string[2] : new string[1])
    );

foreach (var g in lu)
{
    Console.WriteLine(g.Key);
    foreach (var i in g)
    {
        Console.WriteLine("  - " + i.Length);
    }
}
这将产生以下输出:

100
  - 3
  - 3
  - 3
102
  - 1
  - 1
103
  - 1
101
  - 2
说到这里(我对PHP了解不多,所以我不知道该语言是否缺少动态大小的数组或列表和比较),您可能需要重新思考您的代码:如果您想使用列表,那么您不需要首先调整它的大小。然后,您可能希望更加“面向对象”,将“Racing Waddle”封装在一个类中,并使用字典(或查找)根据它们的id对它们进行索引,等等


还有一种类似的方法,可能也会有所帮助。

您是否考虑过重新设计代码,而不是尝试将其直接移植到C#?@SimonWhitehead我没有,没有必要这么做it@user3771693你必须而且已经是了,既然
数组
列表不同
…@developerwjk那么我能做什么呢?
var myArray = new string[3];
// or similar to your PHP code
var myArray = new string[] { "", "", "" };
var sledRacing = new[] { 100, 102, 103, 100, 100, 102, 101 };

var lu = sledRacing.ToLookup(
        k => k,
        k => k == 100 ? new string[3] : (k == 101 ? new string[2] : new string[1])
    );

foreach (var g in lu)
{
    Console.WriteLine(g.Key);
    foreach (var i in g)
    {
        Console.WriteLine("  - " + i.Length);
    }
}
100
  - 3
  - 3
  - 3
102
  - 1
  - 1
103
  - 1
101
  - 2