2017-07-24 77 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); –