`System.Collections.Generic.Dictionary <int,itemtemplate> .ContainsKey(int)'的最佳重载方法匹配有一些无效的参数

时间:2018-04-15 12:26:23

标签: c# unity3d

我也遇到了这些错误: 参数#1' cannot convert string'表达式到类型int' The best overloaded method match for System.Collections.Generic.Dictionary.this [int]'有一些无效的参数 参数#1' cannot convert string'表达式,用于输入`int'

我的代码有一个简单的方法:

public partial class Chat
{
    void OnSubmit_GMAddon(string text)
    {
        var player = Utils.ClientLocalPlayer();
        if (!player)
            return;
        if (!player.admin)
            return;
        if (!Utils.IsNullOrWhiteSpace(text))
        {
            if (text.StartsWith("/give_item"))
            {
                // example usage: /give_item playername count itemname
                ///give_item Ahmet 2 Dark Sword
                List<string> parsed = ParseGMCommand("/give_item", text, 3);

                string user = parsed[0];
                int count = int.Parse(parsed[1]);
                string item = parsed[2];

                if (!Utils.IsNullOrWhiteSpace(user) && !Utils.IsNullOrWhiteSpace(parsed[1]) && !Utils.IsNullOrWhiteSpace(item))
                {
                    if (ItemTemplate.dict.ContainsKey(item))
                    {
                        CmdAddToInventory(user, count, item);
                    }
                    else print("invalid item name");
                }
                else print("Invalid Format: Please use /give_item" + user + "/" + count + "/" + item);
            }

我的词典简单:

 static Dictionary<int, ItemTemplate> cache;
    public static Dictionary<int, ItemTemplate> dict {
        get {
            // load if not loaded yet
            return cache ?? (cache = Resources.LoadAll<ItemTemplate>("").ToDictionary(
                item => item.name.GetStableHashCode(), item => item)
            );
        }
    }

1 个答案:

答案 0 :(得分:2)

您的Dictionary声明如下:

public static Dictionary<int, ItemTemplate> dict;

密钥为int,值为ItemTemplate

稍后在您的代码中,您需要检查它是否包含密钥(请记住,您的密钥是int而不是string):

string item = parsed[2];
if (ItemTemplate.dict.ContainsKey(item))

这就是问题所在。 ContainsKey函数需要int,因为密钥被声明为int,但您传递item string而不是int

你有两个选项来解决这个问题:

1 。将密钥设为string而不是int

public static Dictionary<string, ItemTemplate> dict;

2 。在将项目字符串传递给ContainsKey函数之前将其转换为int:

string item = parsed[2];
int itemToInt = 0;

//Convert item to int
if (Int32.TryParse(item, out itemToInt))
{
    //Success. Now check the key
    if (ItemTemplate.dict.ContainsKey(itemToInt))
}