我也遇到了这些错误:
参数#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)
);
}
}
答案 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))
}