#c# #.net #string #linq #concatenation
#c# #.net #строка #linq #конкатенация
Вопрос:
Есть ли более эффективный способ сделать это с помощью LINQ или String.Join
?
var sb = new StringBuilder();
foreach (var s in cls.Students)
sb.Append("<div id="s" s.Id "">" s.FirstName
" " s.LastName "</div>");
Комментарии:
1. Данные проверяются перед отправкой в базу данных и
cls
берут данные непосредственно из базы данных на том же сервере, что и веб-приложение (это приложение для внутренней сети). Я не вижу возможности для XSS?2. Мое веб-приложение позволяет вводить только определенные символы. По общему признанию, если данные вводятся непосредственно в MySQL (т. Е. Не Через приложение), тогда все может пойти в грушевидную форму.
Ответ №1:
Вы можете использовать string.Concat
:
string result = string.Concat(cls.Students.Select(
s => string.Format("<div id="s{0}">{1} {2}</div>", s.Id, s.FirstName, s.LastName)
));
Это немного более лаконично, но, вероятно, не даст вам большей производительности. Использование a StringBuilder
уже очень эффективно.
Примечания
- В .NET 3.5 и более ранних версиях вам также нужно будет добавить
.ToArray()
непосредственно перед последней круглой скобкой. - Вы должны экранировать HTML
s.FirstName
иs.LastName
. Я предполагаюs.ID
, что это целое число и, следовательно, безопасно.
Комментарии:
1. Спасибо. Нужно ли мне избегать их, даже если
cls
данные берутся прямо из базы данных, которая, как я знаю, содержит проверенные данные?2. @James: Это была бы очень хорошая идея. Они могут быть проверены сегодня, но это может измениться в будущем.
Ответ №2:
Я бы сделал что-то вроде этого.
StringBuilder builder = new StringBuilder();
cls.Students.ForEach(s => builder.Append(HttpUtility.HtmlEncode(string.Format("<div id="{0}">{1} {2}</div>", s.Id, s.FirstName, s.LastName)));
Комментарии:
1.
.ForEach
не отображается в моем IntelliSense — нужно ли мне добавлять ссылку?2. cls.Students — это список студентов, не так ли? ForEach является частью системы. Коллекции. Общее пространство имен.
3. Это
EntityCollection
, но я могуToList()
это, что решает проблему. Спасибо.
Ответ №3:
vb в
Dim XXX As System.Xml.Linq.XElement = <div id=<%="s" s.Id %> ><%= s.FirstName %> <%= s.LastName %></div>
Без кавычек