无法转换类型错误,但两种类型都相同? [复制]
Posted
技术标签:
【中文标题】无法转换类型错误,但两种类型都相同? [复制]【英文标题】:Cannot convert type error, but both types are the same? [duplicate] 【发布时间】:2020-04-24 22:31:44 【问题描述】:public static Dictionary<string, User> userList = new Dictionary<string, User>();
这就是在另一个类中声明“userList”的方式。顺便说一句,该类的名称是“用户”,与类型相同,这可能会导致问题,但我不确定。我不知道如何诚实地完成这项工作。
这是完整的脚本:https://pastebin.com/h56ukpgR 脚本中的某些内容还没有意义,因为我从另一个脚本中复制了一些内容。
但基本上我正在尝试检查静态字典中是否已经存在昵称,如果存在则通知用户并且不要做任何其他事情。
【问题讨论】:
字典中的键是什么?如果它们是昵称,您可以查找密钥。否则,您可以使用foreach(User u in User.userList.Values)
迭代所有用户。
【参考方案1】:
User.userList
是 Dictionary<string, User>
。如果你遍历它,每个元素都是KeyValuePair<string, User>
,而不是User
。
所以你可以这样做:
foreach (KeyValuePair<string, User> kvp in User.userList)
User user = kvp.Value;
或者你可以直接遍历dictionary's values:
foreach (User user in user.userList.Values)
如果字典中每个User
的键是用户的昵称,那么您根本不需要循环。你的代码:
foreach (User u in User.userList)
string uN = u.GetNickName();
if (name == uN)
builder.WithTitle("A practice with the name you specified already exists!");
goto EndFunction;
EndFunction:
await ReplyAsync("", false, builder.Build());
可以替换为:
if (User.userList.ContainsKey(name))
builder.WithTitle("A practice with the name you specified already exists!");
await ReplyAsync("", false, builder.Build());
如果没有,您仍然可以使用 linq 的 Any
简化此代码:
if (User.userList.Values.Any(x => x.GetNickName() == name))
builder.WithTitle("A practice with the name you specified already exists!");
await ReplyAsync("", false, builder.Build());
最后,不推荐这样使用goto
。您只需使用break;
即可跳出循环。
【讨论】:
【参考方案2】:对于未来的读者,解决这些问题的提示是查看错误消息。这里说:
无法将
KeyValuePair<string, User>
转换为User
这仅仅意味着预期的演员表是KeyValuePair<string, User>
,而不是User
。
因此,如果您将循环中的User
替换为KeyValuePair<string, User>
,您的代码将起作用。
【讨论】:
以上是关于无法转换类型错误,但两种类型都相同? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
HttpServlet 无法解析为类型....这是 Eclipse 中的错误吗? [复制]