0

我已经研究了与我的查询匹配的所有问题并尝试了他们的解决方案,但似乎没有一个对我有用所以我问我如何将字符串转换为ushort我已经准备好这个设置

public static string vid
{
    get { return "<vehicleid>"; }
}

我试过用这个:short[] result = vid.Select(c => (ushort)c).ToArray(); 但是当我把 vid ushort 放到这个位时

[RocketCommand("vehicle", "This command spawns you a vehicle!", "<vehicleid>", AllowedCaller.Player)]
public void ExecuteCommandVehicle(IRocketPlayer caller, string[] command)
{
    UnturnedPlayer spawner = (UnturnedPlayer)caller;
    spawner.GiveVehicle(vid);
}

我收到以下错误:

严重性代码 描述 项目文件行抑制状态错误 CS1503 参数 1:无法从 FridgeBlaster 的“字符串”转换为“ushort” arena v C:\Users\Jonathan\Documents\Visual Studio 2015\Projects\arena v by FridgeBlaster\arena v FridgeBlaster\vehicle.cs 71 激活

4

4 回答 4

4

您正在寻找的是ushort.TryParseushort.Parse方法。
我建议使用这段代码:

ushort[] result = vid.Where(i => ushort.TryParse(i, out short s)).Select(ushort.Parse);

或者,如果您不使用最新的 C# 版本:

ushort[] result = vid.Where(i => { ushort r = 0; return ushort.TryParse(i, out r); }).Select(ushort.Parse);

好的,所以问题(正如您的错误所说)是您的GiveVehicle方法接受ushort作为参数并且您正在string输入类型。尝试做这样的事情:

ushort val = 0;
if(ushort.TryParse(vid, out val))
{
    UnturnedPlayer spawner = (UnturnedPlayer)caller;
    spawner.GiveVehicle(val);
}

基于此源,它负责调用标有RocketCommand属性的方法。你<"vehicleid">是/应该首先存储在一个command数组中。所以要得到它并转换使用这样的东西:

if(command.Length > 0)
{
    ushort val = 0;
    if(!string.IsNullOrWhiteSpace(command[0]) && ushort.TryParse(command[0], out val))
    {
        UnturnedPlayer spawner = (UnturnedPlayer)caller;
        spawner.GiveVehicle(val);
    }
}
于 2017-07-24T13:02:51.010 回答
2

对于简单的字符串到 ushort 的转换:UInt16.Parse(string)

于 2018-10-16T15:08:38.573 回答
0

根据该行short[] result = vid.Select(c => (ushort)c).ToArray();,单个字符串中可能有多个 ID(我假设每个字符)。

如果是这种情况,请尝试以下操作:

ushort[] result = vid.ToCharArray().Select(c => (ushort) c).ToArray();

如果字符串中有多个由字符分隔的实际数字(例如“13,15,18”),请试一试:

ushort[] result = vid.Split(separator).Select(str => ushort.Parse(str)).ToArray();

对于这些选项中的任何一个,请确保您包含 usingSystemSystem.Linq命名空间的指令。


通过对这个和其他答案的讨论,它看起来像是commandtokenizing 的结果"/vehicle <id>"。在这种情况下,ExecuteCommandVehicle(IRocketPlayer, string[])方法的主体应该类似于:

ushort result = 0;
if (ushort.TryParse(command[1], out result)) {
  UnturnedPlayer spawner = caller as UnturnedPlayer;
  caller?.GiveVehicle(result);
}
于 2017-07-24T13:10:05.220 回答
0

您想将字符串转换为短字符串:

Int16.Parse(...)

或者

Int16.TryParse(...)

或者您想通过首先将字符串转换为字符数组来将 char 转换为short:

vid.ToCharArray[..]
于 2017-07-24T13:00:02.607 回答