2011-03-29 64 views
0

我從另一個項目到VB.Net轉換一些C#代碼,但下面的代碼拋出一個錯誤錯誤時試圖C#代碼轉換爲VB.Net

Dim obj As System.Collections.ArrayList() 
obj = HTMLWorker.ParseToList(New StreamReader("../sample.htm",encoding.Default), 
styles) 

的錯誤是「類型的值Systems.Collections.Generic.List()不能轉換爲 'Systems.Collections.Arraylist()'

原來的C#代碼是

System.Collections.ArrayList obj; 
obj = HTMLWorker.ParseToList(new StreamReader("../sample.htm",Encoding.Default), 
styles); 

什麼是正確的VB代碼?

+1

你不需要(=不宜用)的'()'ArrayList中後。括號還用在VB中聲明數組,而這可能會導致混亂。 – Heinzi 2011-03-29 10:07:45

回答

4

我覺得這無關,與C#/ VB。這在我看來,

  • 爲C#代碼,你用你的庫的早期版本,它返回一個ArrayList和
  • 您的VB代碼,您使用的返回泛型列表的更新版本。

最簡單的解決方案是使用類型推斷:

// C# 
var obj = HTMLWorker.ParseToList(new StreamReader("../sample.htm", Encoding.Default), styles); 

'' VB 
Dim obj = HTMLWorker.ParseToList(New StreamReader("../sample.htm", Encoding.Default), styles) 

需要注意的是使用這個,你需要有「選項推斷」在您的項目屬性設置爲「開」。

如果你不希望使用類型推斷,你需要用正確的類型來聲明obj。要確定正確的類型,無論是查找的ParseToList文檔或閱讀,當你鍵入HTMLWorker.ParseToList(由智能感知提供的信息。例如,如果ParseToList返回IElement秒的泛型列表,正確的語法是:

Dim obj As Systems.Collections.Generic.List(Of IElement) 
obj = ...