Я довольно плохо знаком с программированием C# и нуждаюсь в некоторой помощи.
Я пытаюсь присвоить значения, которые я собрал от канала JSON до моего собственного типа, класса, в котором я определил определенные поля (свойства) для помещения элементов JSON в плюс элементы, которые получены из процесса сопоставления с образцом RegEx. Это затем позволит мне получать доступ к объекту с помощью LINQ, поскольку я использую Список для содержания моих объектов.
Существует цикл foreach в моем коде, что циклы для каждого соответствия, которое находит мой метод RegEx. Я только интересуюсь частями канала JSON, где существует соответствие.
Таким образом, мой собственный определенный класс как таков:
//simple field definition class
public class TwitterCollection
{
public string origURL { get; set; }
public string txtDesc { get; set; }
public string imgURL { get; set; }
public string userName { get; set; }
public string createdAt { get; set; }
}
И затем я хочу заполнить Список в цикле Соответствий RegEx:
foreach (Match match in matches)
{
GroupCollection groups = match.Groups;
var tc = new List<TwitterCollection>()
{
origURL = groups[0].Value.ToString(),
txtDesc = res.text,
imgUrl = res.profile_image_url,
userName = res.from_user_id,
createdAt = res.created_at,
};
}
Код затем продолжит извлекать и сортировать результаты через Linq к Объектам. Но компилятор на самом деле не позволит мне создать мой var tc = new List<TwitterCollection>()
потому что: 'Система. Наборы. Универсальный. Список' не содержит определение для 'origURL'... даже при том, что я определил его.
Это не отмечает ошибку, если я просто пишу new TwitterCollection
но затем как я обращаюсь к этому в своем выражении Linq позже??
Помогите!
Вам нужно создать список за пределами цикла:
var list = new List<TwitterCollection>();
foreach (Match match in matches)
{
GroupCollection groups = match.Groups;
var tc = new TwitterCollection
{
origURL = groups[0].Value.ToString(),
txtDesc = res.text,
imgUrl = res.profile_image_url,
userName = res.from_user_id,
createdAt = res.created_at,
};
list.Add(tc);
}
На данный момент вы пытаетесь создать новый список для каждого элемента. Фактическая ошибка компиляции состоит в том, что ваш инициализатор объекта предназначен для объекта TwitterCollection
объекта, а не в списке их, но в любом случае нет смысла фиксирования этого недостатка в логике.
Проблема в том, что вы Пытаются использовать инициализатор объекта для для объекта TwitterCollection
, но вы применяете его к списку
. То, что вы хотите сделать вместо этого, предварительно создать список и вызов добавить вместо того, чтобы воссоздать его каждый раз.
var list = new List<TwitterCollection>();
foreach (Match match in matches)
{
GroupCollection groups = match.Groups;
var tc = new TwitterCollection()
{
origURL = groups[0].Value.ToString(),
txtDesc = res.text,
imgUrl = res.profile_image_url,
userName = res.from_user_id,
createdAt = res.created_at,
};
list.Add(tc);
}
Или если вы хотите просто запрос LINQ
var list = matches
.Cast<Match>()
.Select(x => new TwitterCollection() {
origURL = x.Groups[0].Value.ToString(),
txtDesc = res.text,
imgUrl = res.profile_image_url,
userName = res.from_user_id,
createdAt = res.created_at } )
.ToList();
Я думаю, что вам следует попробовать Intellij Idea, это самая мощная интуитивно понятная Java IDE, которую я никогда не видел ( http://www.jetbrains.com/idea/index.html ). Новая версия Community Edition бесплатна и более чем достаточна для разработки Java. Поскольку это очень конфигурируемый вариант, вы можете выбрать «TAB» для автоматического завершения, но я думаю, что вы можете извлечь уроки из существующих комбинаций, которые хорошо разработаны.
С уважением.
-121--4667866-Связанные с @ Goz и @ Josh _ Kelley, вы можете получить gcc/g + +, чтобы выплюнуть предварительно обработанный источник (с # includes inline) с помощью -E. Это один из способов определить, насколько велик ваш источник.
И если проблема заключается в самом компиляторе, вы можете сохранить команду compile, которая занимает много времени, чтобы увидеть, есть ли определенный доступ к файлу или конкретное внутреннее действие, которое занимает много времени.
-121--2319041-Вне темы, но так как вы упомянули, что вы новичок в C #, я подумал, что вам следует рассмотреть вопрос о соблюдении правил именования Microsoft:
http://msdn.microsoft.com/en-us/library/fzcth91k%28VS.71%29.aspx
Ваше объявление класса станет:
public class TwitterCollection
{
public string OrignalUrl { get; set; }
public string TextDescription { get; set; }
public string ImageUrl { get; set; }
public string UserName { get; set; }
public string CreatedAt { get; set; }
}
Еще одна вещь, не обозначенная в приведенной ссылке, это в большинстве случаев венгерская нотация (txtDesc, например) Также не следует использовать аббревиатуры, если только не принята номенклатура (например, Url), так как обычно нет затрат, связанных с использованием полного слова, а не аббревиатуры.
Надеюсь, это полезно!