Два трюка . В основном, инвертирование HTML-кода ваших желаемых элементов в HTML и использование ~
Оператора следующего сиблинга :
float-right
+ инвертирует порядок HTML элементы
div{ /* Do with the parent whatever you know just to make the
inner float-right elements appear where desired */
display:inline-block;
}
span{
float:right; /* float-right the elements! */
}
span:hover ~ span{ /* On hover target it's "previous";) elements */
background:red;
}
<div>
<!-- Reverse the order of inner elements -->
<span>5</span>
<span>4</span>
<span>3</span>
<span>2</span>
<span>1</span>
</div>
direction: rtl;
+ инвертирует порядок внутренних элементов
.inverse{
direction: rtl;
display: inline-block; /* inline-block to keep parent at the left of window */
}
span:hover ~ span{ /* On hover target it's "previous";) elements */
background:gold;
}
Hover one span and see the previous elements being targeted!<br>
<div class="inverse">
<!-- Reverse the order of inner elements -->
<span>5</span>
<span>4</span>
<span>3</span>
<span>2</span>
<span>1</span>
</div>
Предполагая, что раздел новостей
является IEnumerable
, вы хотите:
newsplit = newsplit.Select(x => "WW");
Текущий код эквивалентен следующему:
foreach(string x in newsplit.ToList()) {
AssignmentAction(x);
}
...
public static void AssignmentAction(string x) {
x = "WW";
}
Этот метод не изменяет x
из-за семантики передачи по значению C # и неизменности строк.
Можно записать как это:
newsplit = newsplit.Select(x => "WW").ToList();
В других ответах объясняется, почему ваш текущий код не работает. Вот метод расширения, который исправит это:
// Must be in a static non-nested class
public static void ModifyEach<T>(this IList<T> source,
Func<T,T> projection)
{
for (int i = 0; i < source.Count; i++)
{
source[i] = projection(source[i]);
}
}
Затем используйте вот так:
newsplit.ModifyEach(x => "WW");
Это будет работать с любой реализацией IList
, такой как массивы и List
. Если вам нужно, чтобы он работал с произвольным IEnumerable
, тогда у вас есть проблема, так как сама последовательность не может быть изменяемой.
Использование Select ()
- это конечно, более функциональный подход, но иногда стоит изменить существующую коллекцию ...
Это потому, что выражение LINQ создает Анонимные типы , и они доступны только для чтения. Их нельзя назначить. Кроме того, в стандарте для каждого цикла вы не можете назначить перечисляемую коллекцию. Попробуйте:
foreach (var item in newsplit)
{
item = "this won't work";
}
ForEach позволит вам манипулировать элементами IEnumerable, но не изменять ссылку на элемент.
т.е. это установит свойство Foo
для каждый элемент в IEnumerable в строку «WW»
:
newsplit.ToList().ForEach(x => x.Foo = "WW");
Однако вы не сможете изменять значения внутри самого IEnumerable.