使用array和redim preserver关键字将VB代码转换为C#

时间:2017-06-07 09:11:12

标签: c# arrays vb.net keyword preserve

这是我的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;
}

有人理解为什么吗?

1 个答案:

答案 0 :(得分:5)

右;我认为这里真正的问题是你有一个二维数组; RefStrLinks不是string[],而是string[,],第一轴上的维度为2。 Array.Resize 仅适用于向量(a&#34;向量&#34;是一个基本索引为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#&#34;当前&#34;:值类型元组:

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