簡體   English   中英

如何將字符串轉換為ushort

[英]how to convert a string to a 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將'string'轉換為'ushort'區域v由FridgeBlaster C:\\ Users \\ Jonathan \\ Documents \\ Visual Studio 2015 \\ Projects \\ arena v由FridgeBlaster \\ arena v由FridgeBlaster \\ vehicle.cs 71有效

您正在尋找的是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);
    }
}

對於簡單的字符串到ushort的轉換: UInt16.Parse(string)

您想將字符串轉換為簡短形式:

Int16.Parse(...)

要么

Int16.TryParse(...)

或者您想通過先將字符串轉換為char數組將char轉換為short:

vid.ToCharArray[..]

基於該行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();

對於這兩個選項,請確保包括對SystemSystem.Linq命名空間使用using指令。


通過討論此答案和其他答案,看來command是對"/vehicle <id>"進行標記化的結果。 在這種情況下, ExecuteCommandVehicle(IRocketPlayer, string[])方法的主體應與此類似:

ushort result = 0;
if (ushort.TryParse(command[1], out result)) {
  UnturnedPlayer spawner = caller as UnturnedPlayer;
  caller?.GiveVehicle(result);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM