c#将交错数组复制到字符串
我的函数应该用“&”“;”和“,”分割字符串,并返回三重锯齿数组,反之亦然。(来自以下数据:1,2,3;4,5,6和1,2,3;4,5,6) 我一直在努力使它工作,现在出于某种原因,我得到了一个system.argumentnullexception onc#将交错数组复制到字符串,c#,arrays,jagged-arrays,C#,Arrays,Jagged Arrays,我的函数应该用“&”“;”和“,”分割字符串,并返回三重锯齿数组,反之亦然。(来自以下数据:1,2,3;4,5,6和1,2,3;4,5,6) 我一直在努力使它工作,现在出于某种原因,我得到了一个system.argumentnullexception on Array.Copy(playerOneEnts, allEnts[0], playerOneEnts.Length); Array.Copy(playerTwoEnts, allEnts[1], playerTwoEnts.Length);
Array.Copy(playerOneEnts, allEnts[0], playerOneEnts.Length);
Array.Copy(playerTwoEnts, allEnts[1], playerTwoEnts.Length);
完整代码:
public string convertToString(string[][][] allEnts)
{
string Player = string.Empty;
string[][] playerOneEnts = new string[maxEnts][];
string[][] playerTwoEnts = new string[maxEnts][];
Array.Copy(allEnts[0], playerOneEnts, allEnts[0].Length);
Array.Copy(allEnts[1], playerTwoEnts, allEnts[1].Length);
for (int j = 0; j < playerOneEnts.Length; j++)
{
for (int i = 0; i < playerOneEnts[j].Length; i++)
{
Player += playerOneEnts[j][i] + ",";
}
Player = Player.TrimEnd(',');
Player += ";";
}
Player = Player.TrimEnd(';');
Player += "&";
for (int j = 0; j < playerTwoEnts.Length; j++)
{
for (int i = 0; i < playerTwoEnts[j].Length; i++)
{
Player += playerTwoEnts[j][i] + ",";
}
Player = Player.TrimEnd(',');
Player += ";";
}
Player = Player.TrimEnd(';');
return Player;
}
public string[][][] convertToArray(string ents)
{
string[] p = new string[2];
string[][] playerOneEnts = new string[maxEnts][];
string[][] playerTwoEnts = new string[maxEnts][];
string[][][] allEnts = new string[2][][];
p = ents.Split('&');
try
{
playerOneEnts = p[0].Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries).Select(chunk => chunk.Split(',')).ToArray();
playerTwoEnts = p[1].Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries).Select(chunk => chunk.Split(',')).ToArray();
MessageBox.Show(playerOneEnts.Length.ToString());
Array.Copy(playerOneEnts, allEnts[0], playerOneEnts.Length);
Array.Copy(playerTwoEnts, allEnts[1], playerTwoEnts.Length);
}
catch
{
MessageBox.Show("unable to convert string", "Fatal Error");
}
return allEnts;
}
public string convertToString(string[]allEnts)
{
字符串播放器=string.Empty;
string[][]PlayerEntes=新字符串[maxEnts][];
字符串[][]playerTwoEnts=新字符串[maxEnts][];
Copy(allEnts[0],playronents,allEnts[0].Length);
Copy(allEnts[1],playerTwoEnts,allEnts[1].长度);
对于(int j=0;jchunk.Split(',')).ToArray();
playerTwoEnts=p[1]。拆分(新[]{;“},StringSplitOptions.RemoveEmptyEntries)。选择(chunk=>chunk.Split(',')).ToArray();
Show(playronents.Length.ToString());
Copy(playronents,allEnts[0],playronents.Length);
Copy(playerTwoEnts,allEnts[1],playerTwoEnts.Length);
}
抓住
{
MessageBox.Show(“无法转换字符串”,“致命错误”);
}
返回通道;
}
这段代码对我来说是一场灾难,如果有人知道一种更好的方法将其转换为字符串,我很乐意提供任何想法。摆脱我的错误对我已经有足够的帮助了
谢谢 以下是使用Linq的示例(需要.Net 4.0): 或者,可以使用IEnumarable泛型来避免转换为数组 警告:此代码不验证输入,例如数组长度 编辑:为.NET 3.5重新编码:
var reencoded = String.Join("&", decoded.Select(x => String.Join(";", x.Select(y => String.Join(",", y)).ToArray())).ToArray());
下面是使用Linq的示例(需要.Net 4.0): 或者,可以使用IEnumarable泛型来避免转换为数组 警告:此代码不验证输入,例如数组长度 编辑:为.NET 3.5重新编码:
var reencoded = String.Join("&", decoded.Select(x => String.Join(";", x.Select(y => String.Join(",", y)).ToArray())).ToArray());
可以使用嵌套for循环执行此操作,如下所示:
string p = "1,2,3;4,5,6&1,5,3;4,5,9";
List<List<List<string>>> result = new List<List<List<string>>>();
foreach (var a in p.Split('&'))
{
List<List<string>> level2 = new List<List<string>>();
foreach (var b in a.Split(';'))
{
level2.Add(new List<string>(b.Split(',')));
}
result.Add(level2);
}
var x = result[0][1][2]; // This will result in '6'.
string p=“1,2,3;4,5,6&1,5,3;4,5,9”;
列表结果=新列表();
foreach(p.Split('&')中的var a)
{
列表级别2=新列表();
foreach(a.Split(“;”)中的变量b)
{
二级.增加(新名单(b.拆分(“,”));
}
结果:添加(第2级);
}
var x=结果[0][1][2];//这将导致“6”。
编码类似:
string encoded;
List<string> dec1 = new List<string>();
foreach (var a in result)
{
string e = "";
List<string> z = new List<string>();
foreach (var b in a)
{
z.Add(String.Join(",", b));
}
e = String.Join(";", z);
dec1.Add(e);
}
encoded = String.Join("&", dec1);
字符串编码;
List dec1=新列表();
foreach(结果中的var a)
{
字符串e=“”;
列表z=新列表();
foreach(a中的var b)
{
z、 添加(String.Join(“,”,b));
}
e=String.Join(“;”,z);
dec1.添加(e);
}
encoded=String.Join(“&”,dec1);
您可以使用嵌套for循环执行此操作,如下所示:
string p = "1,2,3;4,5,6&1,5,3;4,5,9";
List<List<List<string>>> result = new List<List<List<string>>>();
foreach (var a in p.Split('&'))
{
List<List<string>> level2 = new List<List<string>>();
foreach (var b in a.Split(';'))
{
level2.Add(new List<string>(b.Split(',')));
}
result.Add(level2);
}
var x = result[0][1][2]; // This will result in '6'.
string p=“1,2,3;4,5,6&1,5,3;4,5,9”;
列表结果=新列表();
foreach(p.Split('&')中的var a)
{
列表级别2=新列表();
foreach(a.Split(“;”)中的变量b)
{
二级.增加(新名单(b.拆分(“,”));
}
结果:添加(第2级);
}
var x=结果[0][1][2];//这将导致“6”。
编码类似:
string encoded;
List<string> dec1 = new List<string>();
foreach (var a in result)
{
string e = "";
List<string> z = new List<string>();
foreach (var b in a)
{
z.Add(String.Join(",", b));
}
e = String.Join(";", z);
dec1.Add(e);
}
encoded = String.Join("&", dec1);
字符串编码;
List dec1=新列表();
foreach(结果中的var a)
{
字符串e=“”;
列表z=新列表();
foreach(a中的var b)
{
z、 添加(String.Join(“,”,b));
}
e=String.Join(“;”,z);
dec1.添加(e);
}
encoded=String.Join(“&”,dec1);