2014-06-27 81 views
0

我有另一个问题转换数组从PHP到C#。C#转换帮助和PHP

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

任何帮助表示赞赏

+3

你有没有考虑重新设计你的代码,而不是试图将其直接移植到C#? –

+0

@SimonWhitehead我还没有,没有必要去做 – user3771693

+0

@ user3771693,那么你不得不这样做,因为'array'与'List'不一样...... – developerwjk

回答

0

我认为你在C#中混淆了列表和数组。 @Simon Witehead是对的,你可能需要用C#习语来重新思考你的代码。同时它让我想起了LookUp类型(我相信这不是那个众所周知的),而且我尽量以(有希望)某种有用的方式回答你的问题。

在此之前,让我清楚的一两件事第一:我假设你正在试图创建与此代码的数组:如果这是正确的

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,所以如果语言缺乏动态大小的数组或列表和比较,我不能告诉),您可能需要重新思考你的代码:如果你想使用一个List,那么你不需要调整它的大小来开始。然后,您可能希望更加“面向对象”,并将“赛跑Waddle”封装在一个类中,并使用字典(或LookUp)通过它们的ID为它们编制索引等等。

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