Доступ к свойствам DataContractJsonSerializer<T> через перефакторизованный цикл foreach
У меня есть код ниже.
Линия string content = twitterMsg.text;
создает ошибку "Использование неназначенной локальной переменной" для twitterMsg. Я не могу получить доступ к своему TwitterSearchResponse.results.text
поля в моем DataContractJsonSerializer<TwitterMain>
коллекция.
TwitterSearchResponse.results
является массивом (набором свойств объекта) с несколькими строковыми полями, прикрепленными с такими именами, как text
а также user_info
,
Может кто-нибудь помочь с этим??
Обновленный код ниже. Я до сих пор в замешательстве, почему я не могу перебирать свои TwitterSearchResponse.results
правильно и назначить content = twitterMsg.text
Для чего это стоит, вот мой метод DataContractJsonSerializer:
String url = String.Format("http://search.twitter.com/search.json?q={0}&rpp=20", Server.UrlEncode(txtSearchFor.Text));
// parse the JSON data
using (MemoryStream ms = new MemoryStream(wc.DownloadData(url)))
{
DataContractJsonSerializer jsonSerializer =
new DataContractJsonSerializer(typeof(TwitterMain));
TwitterSearchResponse = jsonSerializer.ReadObject(ms) as TwitterMain; // read as JSON and map as TwitterOut
}
А вот оригинальный исходный код, где лежит проблема.
public List<MatchCollection> returnMatches(DataContractJsonSerializer<TwitterMain> TwitterSearchResponse)
{
List<MatchCollection> messageLinks = new List<MatchCollection>();
foreach (TwitterResult twitterMsg in TwitterSearchResponse.results)
{
string content = twitterMsg.text;
// capture internet protocol pre-fixed words from message
string pattern = @"...";
messageLinks.Add(Regex.Matches(content, pattern, RegexOptions.IgnoreCase));
// capture @username twitter users from message
string atUsernamePattern = @"@([a-zA-Z0-9-_]+)";
MatchCollection PeopleMatches = Regex.Matches(content, atUsernamePattern, RegexOptions.IgnoreCase);
}
return messageLinks;
}
1 ответ
Я подозреваю, что это на самом деле сообщает об использовании неназначенной локальной переменной MessageLinks
, Ваше использование twitterMsg
выглядит хорошо.
Итак, большой вопрос: что вы хотите вернуть, если результатов нет? Если вы счастливы, возвращая ноль, просто присвойте значение при объявлении MessageLinks
,
Следующий вопрос: вы действительно хотите вернуть только последний MatchCollection
ты находишь? Вот каково текущее поведение: вы перебираете все переменные, каждый раз устанавливаете одну и ту же локальную переменную (т.е. заменяете предыдущее значение), а затем возвращаете это последнее значение.
Последний вопрос: любая причина, по которой вы получили название метода в верблюжьей клетке (returnMatches
), локальная переменная в Паскале (MessageLinks
), имя параметра в Паскале (TwitterSearchResponse
) и собственность на верблюде text
)? Я бы предположил, что text
Это происходит из-за того, что это происходит из JSON, но в противном случае рекомендуется следовать обычным соглашениям об именах.NET.