2017-07-24 40 views
0

我研究了与我的查询匹配的所有问题,并尝试了他们的解决方案,但是没有一个对我有用,所以我问如何将字符串转换为ushort我有这个设置一切准备就绪如何将字符串转换为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场v由C:\ Users \ Jonathan \ Documents \ Visual Studio 2015 \ Projects \ arena v by FridgeBlaster \舞台v通过FridgeBlaster \ vehicle.cs 71主动

+0

我不明白什么ü编辑@ m.rogalski –

+0

检查[修正](https://stackoverflow.com/posts/45281231/修订版)查看编辑内容。 –

回答

0

要么你想要的字符串很短的转换:

Int16.Parse(...) 

Int16.TryParse(...) 

,或者你想先转换字符串的字符数组字符转换为短:

vid.ToCharArray[..] 
+0

他们都说它不存在于当前上下文 –

+0

将'using System;'添加到您的文件的顶部@JonathanConnery – Mafii

+0

@roman ananyev它已经存在 –

1

你要找的是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); 
} 

基于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); 
    } 
} 
+0

它说theres与短位的问题我会尝试另一个 –

+0

我唯一遇到的问题是它的游戏被称为未解除游戏,人们应该/车辆生成某辆车,然后为它们衍生它,但是如果你将它设置为0,它不会产生任何东西 –

+0

这个“未经解析的”并不能说明我太多。上面的所有答案(例子)都在做你想做的事情(把'string'转换成'ushort'),但是因为你提到了一些“游戏引擎”或其他什么。你应该提供更多的信息,如何调用这个方法,或者你在'command'参数中得到了什么。 –

0

基于它看起来像有可能是一个字符串多个ID行short[] result = vid.Select(c => (ushort)c).ToArray();(每个角色,我认为)。

如果是这样的情况下,尝试这样的:

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

如果您是通过一个字符分隔字符串中有几个实际的数字(例如“13,15,18”),给这一个镜头:

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

对于这些选项,请确保您包括使用的SystemSystem.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); 
} 
+0

它说不能从ushort []转换为ushort –

+0

@JonathanConnery你如何使用'result'?如果你提供了一个你想要在问题中转换/解析的字符串的例子,这可能会有所帮助。 – NickMoose

+0

我会复制并粘贴到下面UnturnedPlayer spawner =(UnturnedPlayer)调用者; spawner.GiveVehicle(result); –