2008年7月25日 星期五

C#如何轉換VB.NET的ReDim Preserve

之前一直是用VB.NET作開發,最近換公司老闆的第一個交付的任務就是叫我寫報表,寫好後交出去,專案經理才說要用C#...

那就只好改囉!自己改嗎?我C#又不熟,當然是用工具。下面這個網站可以提供VB.NET和C#程式碼雙向轉換。http://labs.developerfusion.co.uk/convert/vb-to-csharp.aspx

前幾支報表轉的還都順利,只有在取出DataTable內資料時要手動改一下,如:
dtResult.Rows(i).("Item") 要改成 dtResult.Rows[i]["Item"]
但是轉到後面幾支比較複雜的報表,要計算表格的RowSpan,我的程式中有用到ReDim的地方就出現訊息
    // ERROR: Not supported in C#: ReDimStatement

所以就參考網路資料寫了一個Function ReDim:
參考網址:http://www.cnblogs.com/skyiv/archive/2005/09/19/ReDim.html
static int[] ReDim(int[] array, int newLength)
{
    if (array == null)
    {
        throw new ArgumentNullException("array");
    }
    if (array.Rank != 1)
    {
        throw new ArgumentException("只允許一維陣列", "array");
    }
    if (newLength < 0)
    {
        throw new ArgumentOutOfRangeException("newLength", "newLength需大於0");
    }
    if (newLength == array.Length) return array;

    int[] newArray = new int[newLength];
    Array.Copy(array, 0, newArray, 0, Math.Min(array.Length, newLength));
    return newArray;
}

因為我用到的是整數陣列,所以我就將範例中原本宣告為Array的部份都直接改成int[],不然我還要找要怎麼作型別轉換,將傳回的Array轉回int[],我C#還不熟,趕專案先,以後再研究。

0 意見:

張貼留言