作者:佩人永雪3 | 来源:互联网 | 2023-02-01 20:10
这是我的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(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> Marc Gravell..:
对; 我认为这里真正的问题是你有一个二维数组; RefStrLinks
不是a string[]
,而是a string[,]
,第一轴上的尺寸为2.Array.Resize
仅适用于矢量("矢量"是基本索引为0的一维数组,即string[]
).
坦率地说,我将取代所有这些(再调光的阵列或使用Array.Resize
每个元素是荒谬的东西,如昂贵的):
List 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}");
}