我已经研究了所有与我的查询相符的问题并尝试了他们的解决方案,但是似乎没有一个对我有效,所以我问我如何将字符串转换为ushort
我已经准备好了这个1} p>
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:无法从'string'转换为'ushort'竞技场v by FridgeBlaster C:\ Users \ Jonathan \ Documents \ Visual Studio 2015 \ Projects \ arena v by FridgeBlaster \ arena v by FridgeBlaster \ vehicle.cs 71 Active < / p>
答案 0 :(得分:2)
您正在寻找的是ushort.TryParse
或ushort.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);
}
基于on this source,负责调用标有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);
}
}
答案 1 :(得分:1)
要将字符串转换为ushort,请执行以下操作:UInt16.Parse(string)
答案 2 :(得分:0)
要么将字符串转换为short:
Int16.Parse(...)
或
Int16.TryParse(...)
或者你想通过首先将字符串转换为字符数组来将char转换为short:
vid.ToCharArray[..]
答案 3 :(得分:0)
基于行short[] result = vid.Select(c => (ushort)c).ToArray();
,看起来单个字符串中可能有多个ID(我假设每个字符)。
如果是这种情况,请尝试以下方法:
ushort[] result = vid.ToCharArray().Select(c => (ushort) c).ToArray();
如果你在一个字符分隔的字符串中有多个实际数字(例如&#34; 13,15,18&#34;),请给它一个镜头:
ushort[] result = vid.Split(separator).Select(str => ushort.Parse(str)).ToArray();
对于其中任何一个选项,请确保包含System
和System.Linq
命名空间的使用指令。
通过对此答案及其他答案的讨论,看起来command
是标记"/vehicle <id>"
的结果。在这种情况下,ExecuteCommandVehicle(IRocketPlayer, string[])
方法的主体应该与此类似:
ushort result = 0;
if (ushort.TryParse(command[1], out result)) {
UnturnedPlayer spawner = caller as UnturnedPlayer;
caller?.GiveVehicle(result);
}