Не может добавить один список другому в C# … пытающийся использовать AddRange

Я знаю, что исходный вопрос определил HTML + CSS, но это конкретно не сказало никакой javascript;)

Попытка сохранить css и разметку максимально чистыми, и максимально семантически значимыми для (использование UL для меню) я придумал это предложение. Вероятно, не идеальный, но это может быть хорошая начальная точка:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>

    <head>
        <title>Kind-of-justified horizontal menu</title>

        <style type="text/css">
        ul {
            list-style: none;
            margin: 0;
            padding: 0;
            width: 100%;
        }

        ul li {
            display: block;
            float: left;
            text-align: center;
        }
        </style>

        <script type="text/javascript">
            setMenu = function() {
                var items = document.getElementById("nav").getElementsByTagName("li");
                var newwidth = 100 / items.length;

                for(var i = 0; i < items.length; i++) {
                    items[i].style.width = newwidth + "%";
                }
            }
        </script>

    </head>

    <body>

        <ul id="nav">
            <li><a href="#">first item</a></li>
            <li><a href="#">item</a></li>
            <li><a href="#">item</a></li>
            <li><a href="#">item</a></li>
        <li><a href="#">item</a></li>
            <li><a href="#">last item</a></li>
        </ul>

        <script type="text/javascript">
            setMenu();
        </script>

    </body>

</html>
8
задан Matt 12 November 2009 в 19:09
поделиться

5 ответов

Когда вы вызываете ToList () , вы не помещаете коллекцию в List вы создаете новый List с такими же элементами в нем. Таким образом, вы фактически создаете новый список, добавляете в него элементы, а затем отбрасываете список.

Вам нужно будет сделать что-то вроде:

List<E> merged = new List<E>();
merged.AddRange(resultCollection);
merged.AddRange(resultCollection2);

В качестве альтернативы, если вы используете C # 3.0, просто используйте Concat , например

resultCollection.Concat(resultCollection2); // and optionally .ToList()
31
ответ дан 5 December 2019 в 04:58
поделиться

Я бы предположил .ToList ( ) создает новую коллекцию. Поэтому ваши предметы добавляются в новую коллекцию, которая сразу же выбрасывается, а оригинал остается нетронутым.

4
ответ дан 5 December 2019 в 04:58
поделиться

resultCollection.ToList () вернет новый список.

Попробуйте:

List<E> list = resultCollection.ToList();
list.AddRange(resultCollection2);
1
ответ дан 5 December 2019 в 04:58
поделиться

Попробуйте

IList newList = resultCollection .ToList (). AddRange (resultCollection2);

List<E> newList = resultCollection.ToList();
newList.AddRange(resultCollection2);
1
ответ дан 5 December 2019 в 04:58
поделиться

Вы можете использовать любое из следующего:

List<E> list = resultCollection as List<E>;
if (list == null)
    list = new List<E>(resultCollection);
list.AddRange(resultCollection2);

Или:

// Edit: this one could be done with LINQ, but there's no reason to limit
//       yourself to .NET 3.5 when this is just as short.
List<E> list = new List<E>(resultCollection);
list.AddRange(resultCollection2);

Или:

List<E> list = new List<E>(resultCollection.Concat(resultCollection2));
0
ответ дан 5 December 2019 в 04:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: