【问题标题】:how to convert a string to a ushort如何将字符串转换为 ushort
【发布时间】:2017-07-24 12:55:45
【问题描述】:

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

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

我试过用这个:short[] result = vid.Select(c =&gt; (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 C:\Users\Jonathan\Documents\Visual Studio 2015\Projects\arena v 由 FridgeBlaster\arena v 由 FridgeBlaster\vehicle.cs 71 Active

【问题讨论】:

  • 我不明白你编辑了什么@m.rogalski
  • 检查 revisions 以查看已编辑的内容。

标签: c# string ushort


【解决方案1】:

您正在寻找的是 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属性的方法。您的&lt;"vehicleid"&gt; 是/应该首先存储在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);
    }
}

【讨论】:

  • 它说短位有问题,我要试试另一个
  • 我唯一遇到的问题是它对于一个名为 unturned 的游戏,人们应该执行 /vehicle 来生成特定车辆,然后它会为他们生成它,但如果你正在设置它为 0 它不能产生任何东西
  • 这个“未转变”并没有告诉我太多。上面的所有答案(示例)都在做你想做的事(将 string 转换为 ushort ),但是因为你提到了一些“游戏引擎”或其他什么。你应该提供更多信息,这个方法是如何调用的,或者你在command参数中得到了什么。
  • 您可以使用 ÀllowedCaller.player AllowedCaller.console 或 AllowedCaller.both 选择谁调用它它使用 /vehicle 命令,它是 [RocketCommand] 中的第一个“”,其中一个强制变量是 spanwer.GiveVehicle(vid) 中使用的 ; whihc 将根据游戏中的 id 为调用命令的玩家生成载具
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    Int16.Parse(...)
    

    或

    Int16.TryParse(...)
    

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

    vid.ToCharArray[..]
    

    【讨论】:

    • 他们都说在当前上下文中不存在
    • 将using System; 添加到文件顶部@JonathanConnery
    【解决方案4】:

    根据short[] result = vid.Select(c =&gt; (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();
    

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


    通过讨论这个和其他答案,看起来command 是标记化"/vehicle &lt;id&gt;" 的结果。在这种情况下,ExecuteCommandVehicle(IRocketPlayer, string[]) 方法的主体应该类似于:

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

    【讨论】:

    • 它说不能从 ushort[] 转换为 ushort
    • @JonathanConnery 你如何使用result?如果您在问题中提供您尝试转换/解析的字符串示例,可能会有所帮助。
    • 我会复制粘贴到UnturnedPlayer spawner = (UnturnedPlayer)caller下面; spawner.GiveVehicle(result);
    • result 是一个数组 - 您需要从数组中找出您需要的元素。例如。 spawner.GiveVehicle(result[0])。如果您的 vid 变量只是一个数字,请像 Roman Ananyev 或 m.rogalski 建议的那样使用 ushort.TryParse。
    • 这就是问题所在,它是游戏中某事物的 id,其数字范围为 2-147
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 2011-10-24
    • 2011-12-31
    相关资源
    最近更新 更多