请忍受我,我很困惑,我可能完全没有意义。我玩一个游戏,我有一个源代码,用c#编码,我正在尝试制作一个我在游戏中使用的命令,播放声音。
我有这个:
string[] Strings = new string[2];
Strings[0] = "sound/1.mp3";
Strings[1] = "1";
SendPacket(General.MyPackets.String(MyChar.UID, 20, Strings));
在SendPacket中的字符串上,它表示无法转换string [] string。
我知道我做错了,在一个例子中我见过别人做的,它包含了一个“分裂('')”,但我不知道该怎么做。
这是我看到的那个例子(这不是我的代码,但我试图使用和失败的参考)
{
string[] Strings = new string[2];
string[] sound = param.Split(' ');
Strings[0] = sound[1];
Strings[1] = "1";
string todo = sound[0];
string media = sound[1];
if (todo == "play")
{
CSocket.Send(CoPacket.String(Strings, 0, (Struct.StringType)(20), 2));
}
else if (todo == "broadcast")
{
foreach (ClientSocket CS in World.ClientPool.Values)
{
CSocket.Send(CoPacket.String(Strings, 0, (Struct.StringType)(20), 2));
}
}
break;
}
我想知道如何使我的代码工作,但是发送字符串(1和2)。感谢您的帮助,如果我弄糊涂你,我感到非常抱歉。
public void SendPacket(byte[] Dat)
{
try
{
if (ListenSock != null)
if (ListenSock.WinSock.Connected)
{
int Len = Dat[0] + (Dat[1] << 8);
if (Dat.Length != Len)
return;
System.Threading.Monitor.TryEnter(this, new TimeSpan(0, 0, 0, 8, 0));
byte[] Data = new byte[Dat.Length];
Dat.CopyTo(Data, 0);
Crypto.Encrypt(ref Data);
ListenSock.WinSock.Send(Data);
System.Threading.Monitor.Exit(this);
}
}
catch { }
}
public byte[] String(long CharId, byte Type, string name)
{
ushort PacketType = 1015;
byte[] Packet = new byte[13 + name.Length];
fixed (byte* p = Packet)
{
*((ushort*)p) = (ushort)Packet.Length;
*((ushort*)(p + 2)) = (ushort)PacketType;
*((uint*)(p + 4)) = (uint)CharId;
*(p + 8) = Type;
*(p + 9) = 1;
*(p + 10) = (byte)name.Length;
for (int i = 0; i < name.Length; i++)
{
*(p + 11 + i) = Convert.ToByte(name[i]);
}
}
return Packet;
}
答案 0 :(得分:0)
试试这个
string[] Strings = new string[2];
Strings[0] = "sound/1.mp3";
Strings[1] = "1";
SendPacket(General.MyPackets.String(MyChar.UID, 20, String.Join(' ', Strings)));
答案 1 :(得分:0)
您的错误:
无法转换字符串
中的字符串[]
只是意味着他正在尝试将类型字符串的数组/列表转换为单个字符串,但c#默认情况下无法执行此操作,因此您必须自己执行此操作。
现在转到您的代码示例。
他正在使用其他方法
他使用String(string[] ?? , ??, ??, ??)
和你String(long CharId, byte Type, string name)
这是基于他的CoPacket
和您的MyPackets
属于同一类的假设
答案 2 :(得分:0)
试试这个:
string[] Strings = new string[2];
string[] sound = param.Split(' ');
Strings[0] = sound[1];
Strings[1] = "1";
string todo = sound[0];
string media = sound[1];
string concatString = Strings[0] + Strings[1];
if (todo == "play")
{
CSocket.Send(CoPacket.String(concatString , 0, (Struct.StringType)(20), 2));
}