Я пытаюсь создать экземпляр AnonymousType выглядит следующим образом:Создать новый экземпляр AnonymousType
new { Channel = g.Key.Channel, Comment = g.Key.Comment, Count = g.Count() }
В темноте, .NET создает AnonymousType с конструктором, который принимает три аргумента: String, String, Int32
.
Для того, чтобы создать новый экземпляр этого анонимного типа, Т, я:
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 request
IRestResponse 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);
}
}
Что такое 'T' ...? –
Почему вы пытаетесь это сделать? Если вам нужно создавать экземпляры по своему желанию, просто используйте именованный тип – Luaan
Какой бы «анонимный тип». – Jordi