2010-08-24 57 views
1
Private Function getFoo(ByVal _FileInfo As FileInfo) As foo() 
    Dim provider As New ExcelStorage(GetType(foo)) 
    provider.StartRow = 2 
    provider.StartColumn = 1 
    provider.FileName = _FileInfo.FullName 
    Dim res() As foo = provider.ExtractRecords() 
    Return res 
End Function 

我有上面的代碼在vb.net,我想轉換爲C#。我正在使用FileHelper庫從Excel中提取數據。這是我轉換到C#。動態數組在C#(vb.net代碼段)

public static foo GetFoo(FileInfo fInfo) 
{ 
var provider = new ExcelStorage(typeof(foo)); 
provider.StartRow = 2; 
provider.StartColumn = 1; 
provider.FileName = fInfo.FullName; 
foo res[] = provider.ExtractRecords(); 
return res; 
} 

我在做什麼錯在這裏。我得到壞數組聲明。我必須首先聲明數組的大小嗎?

謝謝

編輯:我改變了建議的代碼。但是,我收到此錯誤。

「無法隱式轉換類型‘對象[]’到‘富[]’。一個顯式轉換存在(是否缺少強制轉換?)」

不過,我覺得我已經設置在ExcelStorage爲foo類型作爲typeof(foo)。沒關係,我是通過鑄造來完成的。

回答

2
foo res[] = provider.ExtractRecords(); 

應該是

foo[] res = provider.ExtractRecords(); 

類似地,如你正在返回的foo秒的陣列,所述聲明應成爲:

public static foo[] GetFoo(FileInfo fInfo) 
4

應該是:foo[] res = provider.ExtractRecords()

1

這是foo[] res而不是foo res[]

在VB中可以使用任一語法,其中作爲一個陣列是可變的屬性:

Dim x() As Integer 

或其中作爲一個陣列的類型的屬性:

Dim x As Integer() 

的前者在VB 6中更有意義,其中數組是一種特殊的變量,而後者在VB.NET中更有意義,其中數組是對象。

在C#作爲一個陣列總是類型的一部分:

int[] x; 
1

在C#中的數組語法連接的類型,而不是變量

foo[] res = provider.ExtractRecords(); 
1

在C#中,你聲明像這樣Type[] VariableName數組變量不喜歡這個Type VariableName[]

0

加上你的方法需要返回數組以及

public static foo[] GetFoo(FileInfo fInfo) 
0

固定碼:

public static foo[] GetFoo(FileInfo fInfo) 
{ 
    var provider = new ExcelStorage(typeof(foo)); 
    provider.StartRow = 2; 
    provider.StartColumn = 1; 
    provider.FileName = fInfo.FullName; 
    foo[] res = provider.ExtractRecords(); 
    return res; 
}