Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试向IDictionary提供匿名类时出错_C# - Fatal编程技术网

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)
那么我必须严格地将其作为
字典
仅传递给该方法?是的,您只能将
字典
for
htmlAttributes
传递给该方法。但是您可以有一个单独的方法
公共静态字符串标签(这个HtmlHelper HtmlHelper、string forName、string labelText、object htmlAttributes)
,您可以将匿名类型传递给。Argh我太慢了,完全忘记了反射。我可以转换匿名文件并将其重定向到带有IDictionary的文件。我的想法正确吗?因此,如果我有类似于
公共静态字符串标签(这个HtmlHelper HtmlHelper,string forName,string labelText,IDictionary HtmlatAttribute)
的东西,那么我必须严格按照
字典
的方式传递它。是的,你可以