簡體   English   中英

使用array和redim preserver關鍵字將VB代碼轉換為C#

[英]Converting VB code to C# using array and redim preserver keyword

這是我的VB代碼:

If TxtStr(i) = "#" And TxtStr(i + 1) = "]" Then
    RefStr = RefStr & "]"
    ReDim Preserve RefStrLinks(1, RefStrLinkIndex)
    RefStrLinks(0, RefStrLinkIndex) = RefStr
    RefStr = RefStr.Replace("[#", String.Empty)
    RefStr = RefStr.Replace("#]", String.Empty)
    RefStrLinks(1, RefStrLinkIndex) = RefStr
    RefStrLinkIndex = RefStrLinkIndex + 1
    RefStr = String.Empty
    RefStrFound = False
End If

這是我在C#中轉換的代碼; RefStrLinks聲明為:

string[,] RefStrLinks = null;

但是每當我運行它時,由於ReDim Preserve這會產生編譯錯誤:

if (TxtStr[i].ToString() == "#" & TxtStr[i + 1].ToString() == "]")
{
    RefStr = RefStr + "]";
    Array.Resize<string>(ref RefStrLinks, RefStrLinkIndex + 1);
    RefStrLinks[0, RefStrLinkIndex] = RefStr;
    RefStr = RefStr.Replace("[#", string.Empty);
    RefStr = RefStr.Replace("#]", string.Empty);
    RefStrLinks(1, RefStrLinkIndex) = RefStr;
    RefStrLinkIndex = RefStrLinkIndex + 1;
    RefStr = string.Empty;
    RefStrFound = false;
}

有人理解為什么嗎?

對; 我認為這里真正的問題是你有一個二維數組; RefStrLinks不是string[] ,而是string[,] ,第一個軸上的維度為2。 Array.Resize 僅適用於向量 (“向量”是基本索引為0的一維數組,即string[] )。

坦率地說,我將取代所有這些(重新調光的陣列或使用Array.Resize每個元素是昂貴荒謬 )與類似:

List<SomeBasicType> list = ...
...
// where "foo" and "bar" are the two values that you intend to store per item
var item = new SomeBasicType(foo, bar);
list.Add(item);

也許SomeBasicType是一個帶有兩個字符串的不可變結構。 或者更簡單地說,在C#“current”中:value-type元組:

// declare the list (change the names to something meaningful for your code)
var list = new List<(string name, string url)>();

// ... add values efficiently

string name = "whatever"; // your per-item code goes here
string url = "some value"; // and here
list.Add((name, url));

// ... show that we have the data

foreach(var item in list)
{
    Console.WriteLine($"{item.name} / {item.url}");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM