C#转换帮助& PHP

时间:2014-06-27 23:01:11

标签: c# php

我有一个问题,将数组从php转换为c#。

public $array = array(103 => array('', ''), 102 => array('', ''), 101 => array('', '', ''), 100 => array('', '', '', ''));

这就是我所拥有的:

public Dictionary<int, List<string>> waddlesById = new Dictionary<int, List<string>>();

问题在于我这样做:

sizeof($this->array[$waddleId]) - 1

那等于-1,但是当它在c#中执行时:

waddlesById[waddleId].Count - 1

等于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);
                }
            }

感谢任何帮助

2 个答案:

答案 0 :(得分:0)

使用.Count会自动创建条目。请改用:http://msdn.microsoft.com/en-us/library/htszx2dy.aspx

使用waddlesById.ContainsKey(waddleId)

答案 1 :(得分:0)

我认为你在C#中混淆了列表和数组。 @Simon Witehead是对的,您可能需要重新考虑C#习语中的代码。同时它提醒我LookUp类型(我认为不是众所周知的),我虽然试图以某种有用的方式回答你的问题。

在此之前,我先说清楚一件事:我假设您正在尝试使用此代码创建数组:

maxSeats = ",,,";

如果这是正确的,那么这里是如何创建一个包含三个元素的数组:

var myArray = new string[3];
// or similar to your PHP code
var myArray = new string[] { "", "", "" };

至于LookUp示例,我认为,它提供了更多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,所以我无法判断语言是否缺少动态大小的数组或列表并进行比较),您可能需要重新考虑您的代码:如果您想使用List然后你不需要开始它的大小。那么你可能想要更加“面向对象”并在一个类中封装“Racing Waddle”并使用字典(或LookUp)按它们的id索引它们等等。

有一个类似的example on MSDN using LookUp type,也可能有所帮助。