C# 尝试向IDictionary提供匿名类时出错
我一直在关注这个关于如何为C# 尝试向IDictionary提供匿名类时出错,c#,C#,我一直在关注这个关于如何为IDictionary使用匿名的问题,因为它提供了一个更简洁的代码解决方案 当我尝试测试它的工作方式时,我从编译器中得到以下错误: (23:13) The best overloaded method match for 'Rextester.Program.test(System.Collections.Generic.IDictionary<string,string>)' has some invalid arguments (23:18) Argu
IDictionary
使用匿名的问题,因为它提供了一个更简洁的代码解决方案
当我尝试测试它的工作方式时,我从编译器中得到以下错误:
(23:13) The best overloaded method match for 'Rextester.Program.test(System.Collections.Generic.IDictionary<string,string>)' has some invalid arguments
(23:18) Argument 1: cannot convert from 'AnonymousType#1' to 'System.Collections.Generic.IDictionary<object,string>'
(23:13)与“rextest.Program.test(System.Collections.Generic.IDictionary)”匹配的最佳重载方法具有一些无效参数
(23:18)参数1:无法从“AnonymousType#1”转换为“System.Collections.Generic.IDictionary”
这是我的密码:
namespace Rextester
{
public class Program
{
public static void test(IDictionary<object,string> carl){}
public static void Main(string[] args)
{
test(new{carl="Hello", carl2="World"});
}
}
}
名称空间测试仪
{
公共课程
{
公共静态无效测试(IDictionary carl){}
公共静态void Main(字符串[]args)
{
测试(新的{carl=“Hello”,carl2=“World”});
}
}
}
有人能告诉我我做错了什么吗?我甚至从另一个复制粘贴了代码,所以我仍然不断得到相同的错误
编译器:我在学校,所以我只使用在线编译器。根据:
匿名类型是直接从对象派生的类类型,不能转换为除对象以外的任何类型
因此,我猜编译器无法将其强制转换为IDictionary进行方法调用,这是编译器告诉您的。根据:
匿名类型是直接从对象派生的类类型,不能转换为除对象以外的任何类型
因此,我猜编译器无法将其强制转换为IDictionary进行方法调用,这是编译器告诉您的。试试这个
public static void test(IDictionary<object, string> carl)
{
}
public static void Main(string[] args)
{
test( new Dictionary<object,string>{{"Hello", "World"}});
}
公共静态无效测试(IDictionary carl)
{
}
公共静态void Main(字符串[]args)
{
测试(新字典{{“你好”,“世界”});
}
试试这个
public static void test(IDictionary<object, string> carl)
{
}
public static void Main(string[] args)
{
test( new Dictionary<object,string>{{"Hello", "World"}});
}
公共静态无效测试(IDictionary carl)
{
}
公共静态void Main(字符串[]args)
{
测试(新字典{{“你好”,“世界”});
}
MVC不会将匿名对象转换为IDictionary
。请注意,链接问题中有两种方法:
public static MvcHtmlString TextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
IDictionary<string, object> htmlAttributes);
public static MvcHtmlString TextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
object htmlAttributes);
公共静态MvcHtmlString TextBoxFor(
这个HtmlHelper HtmlHelper,
表情表情,
i词典(贡品);
公共静态MvcHtmlString TextBoxFor(
这个HtmlHelper HtmlHelper,
表情表情,
对象(属性);
第一个方法的最后一个参数是IDictionary
,而第二个方法的最后一个参数是object
。将匿名对象传递给TextBoxFor
时,将调用第二个方法,因为匿名对象可以转换为对象,但不能转换为IDictionary
。然后它将使用反射来获取在匿名类型上定义的属性和值
有关如何将匿名类型转换为和的信息,请参见 MVC不会将匿名对象转换为IDictionary
。请注意,链接问题中有两种方法:
public static MvcHtmlString TextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
IDictionary<string, object> htmlAttributes);
public static MvcHtmlString TextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
object htmlAttributes);
公共静态MvcHtmlString TextBoxFor(
这个HtmlHelper HtmlHelper,
表情表情,
i词典(贡品);
公共静态MvcHtmlString TextBoxFor(
这个HtmlHelper HtmlHelper,
表情表情,
对象(属性);
第一个方法的最后一个参数是IDictionary
,而第二个方法的最后一个参数是object
。将匿名对象传递给TextBoxFor
时,将调用第二个方法,因为匿名对象可以转换为对象,但不能转换为IDictionary
。然后它将使用反射来获取在匿名类型上定义的属性和值
有关如何将匿名类型转换为和的信息,请参见 new{…}
不是IDictionary
为什么它在这里工作?没有。“我的建议:让方法接受object类型的参数。”-他将方法改为接受object而不是IDictionary。@CarloBrew没有,那篇文章的作者在他这样做后没有发布新的原型:“让方法接受object类型的参数。”。。。他将参数从dictionary改为object。哦,对了,它不能。好的,谢谢。new{…}
不是IDictionary
为什么它在这里工作?没有。“我的建议:让方法接受object类型的参数。”-他将方法改为接受object而不是IDictionary。@CarloBrew没有,那篇文章的作者在他这样做后没有发布新的原型:“让方法接受object类型的参数。”。。。他将参数从dictionary改为object。哦,对了,它不能。好的,谢谢。是的,我认为这是唯一可能的解决办法,制作一本新的词典。谢谢。是的,我认为这是唯一可能的解决办法,制作一本新的词典。谢谢。如果我有类似于publicstaticstringlabel的东西(这个htmlhelperhtmlhelper,stringforname,stringlabeltext,IDictionary-htmlAttributes)
那么我必须严格地将其作为字典
仅传递给该方法?是的,您只能将字典
forhtmlAttributes
传递给该方法。但是您可以有一个单独的方法公共静态字符串标签(这个HtmlHelper HtmlHelper、string forName、string labelText、object htmlAttributes)
,您可以将匿名类型传递给。Argh我太慢了,完全忘记了反射。我可以转换匿名文件并将其重定向到带有IDictionary的文件。我的想法正确吗?因此,如果我有类似于公共静态字符串标签(这个HtmlHelper HtmlHelper,string forName,string labelText,IDictionary HtmlatAttribute)
的东西,那么我必须严格按照字典
的方式传递它。是的,你可以