我们正在升级糟糕的 cms 系统,新程序集已从 int 更改为 int64。我现在尝试构建时遇到了问题。我尝试过类型转换,但它似乎没有帮助。这是导致问题的代码摘录。
IDictionary<int, string> aliases
= new UrlAliasApi().GetUrlAliasesByType(
Company.DataLayer.Enumeration.UrlAliasType.Recipe);
foreach (ContentBase recipe in mergedResultset)
{
// if alias exists, overwrite quicklink!
string alias;
if (aliases.TryGetValue(recipe.Id, out alias))
{
recipe.QuickLink = alias;
}
}
错误是
Error 323 The best overloaded method match for 'System.Collections.Generic.IDictionary.TryGetValue(int, out string)' has some invalid arguments
它指的是 recipe.Id
,它是一个 Int64
值。
有什么解决办法吗?
最佳答案
因为 C# 是强类型的,所以不能这样转换。在传入之前,您需要将 Int64 转换为 Int32:
aliases.TryGetValue((int)recipe.Id, out alias)
或者,您可以更改字典的定义:
IDictionary<Int64, string> aliases
= new UrlAliasApi().GetUrlAliasesByType(Company.DataLayer.Enumeration.UrlAliasType.Recipe)
.ToDictionary(kvp => (Int64)key.Key, kvp => kvp.Value);
关于C# 将 int 转换为 Int64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4055389/