无法将string []转换为字符串

时间:2015-08-19 03:33:48

标签: c# string split

请忍受我,我很困惑,我可能完全没有意义。我玩一个游戏,我有一个源代码,用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;
    }

3 个答案:

答案 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));
}