我正在尝试创建一个AnonymousType实例,如下所示:new { Channel = g.Key.Channel, Comment = g.Key.Comment, Count = g.Count() }在黑暗中,.NET使用带有三个参数的构造函数创建一个AnonymousType:String, String, Int32。为了创建这种匿名类型T的新实例,我要做:object[] args = new object[3];args[0] = "arg1";args[1] = "arg2";args[2] = 200;(T)Activator.CreateInstance(typeof(T), args);.NET转储我: 附加信息:在' f__AnonymousType2`3 [[System.String,...],[System.String,...],[System.Int32,...]]'中找不到构造函数。我不知道为什么CreateInstance试图调用像[[],[],[]]这样的构造函数!范围真正的范围很难解释:我创建了一个Linq提供程序。该提供程序将Linq句子翻译为我的服务器方法。当我收到json信息时,我需要将此信息投影到指定的Type用户。在这种情况下:var enumerable = UIContainer.UIController.Instance.getDigitalInputs() .GroupBy(di => new { Channel = di.Channel, Comment = di.Comment }) .Select(g => new { Channel = g.Key.Channel, Comment = g.Key.Comment, Count = g.Count() });因此,我需要将每个json项目投影到new { Channel = g.Key.Channel, Comment = g.Key.Comment, Count = g.Count() })。最后,我需要创建此匿名类型的实例。所以:// make the HTTP requestIRestResponse response = (IRestResponse) this.client.CallApi(path, Method.GET, queryParams, postBody, headerParams, formParams, fileParams, authSettings);if (((int)response.StatusCode) >= 400) { throw new ApiException (response.StatusCode, "Error calling Search: " + response.Content, response.Content);}Newtonsoft.Json.Linq.JArray feeds = Newtonsoft.Json.Linq.JArray.Parse(response.Content);if (feeds.Any()){ PropertyDescriptorCollection dynamicProperties = TypeDescriptor.GetProperties(feeds.First()); foreach (dynamic feed in feeds) { object[] args = new object[dynamicProperties.Count]; int i = 0; foreach (PropertyDescriptor prop in dynamicProperties) { args[i++] = prop.GetValue(feed); } //args[0] = ""; //args[1] = ""; //args[2] = 2; yield return (T)Activator.CreateInstance(typeof(T), args); }} (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 不确定从哪里获取T,但是如果您使用前一个变量的匿名类型,则代码可以正常工作:var x = new { Channel = "Channel", Comment = "Comment", Count = 1 };object[] args = new object[3];args[0] = "arg1";args[1] = "arg2";args[2] = 200;var y = Activator.CreateInstance(x.GetType(), args);(然后回复Luaan:.NET使用匿名类型的构造函数,请参见IL :).method public hidebysig specialname rtspecialname instance void .ctor(!'<Channel>j__TPar' Channel, !'<Comment>j__TPar' Comment, !'<Count>j__TPar' Count) cil managed (adsbygoogle = window.adsbygoogle || []).push({});