Как добавить заголовок столбца в ListView в C#

у меня есть элемент управления ListView без столбцов.

в список

List<String> MyList=new List<string>();

мне нужно создать столбцы для каждого списка MyList элемент ListView вместе с одним другим столбцом для серийного номера.

например, если MyList содержит "A", "B" ,"C"

потом в списке будет как

alt text

Я знаю, что мы можем сделать это с помощью for или foreach цикл вроде

listView1.Columns.Add("S.No")
for(int i=0;i<MyList.Count;i++)
   {
      listView1.Columns.Add(MyList[i])
   }

но есть ли способ сделать это с помощью LINQ или LAMBDA Expression?

3 ответов


MyList.ForEach(name => listView1.Columns.Add(name));

вот 4 варианта
есть, по крайней мере, еще 10 способов сделать это,

var myList = new List<string>() { "A", "B", "C" };

// 1: Modify original list and use List<>.ForEach()
myList.Insert(0, "S. No");
myList.ForEach(x => lisView.Columns.Add(x));

// 2: Add first column and use List<>.ForEach()
listView.Columns.Add("S. No");
myList.ForEach(x => listView.Columns.Add(x));

// 3: Don't modify original list
(new[] { "S. No" }).Concat(myList).ToList()
    .ForEach(x => listView.Columns.Add(x));

// 4: Create ColumnHeader[] with Linq and use ListView.Columns.AddRange()
var columns = (new[] { "S. No"}).Concat(myList)
    .Select(x => new ColumnHeader { Text = x }).ToArray();
listView.Columns.AddRange(columns);

вы рассматривали поцелуй?


просто чтобы было немного яснее, что написал Aliostad и что означают комментарии ниже этого ответа:

так, в настоящее время у вас есть этот код:

listView1.Columns.Add("S.No")
for(int i=0;i<MyList.Count;i++)
{
    listView1.Columns.Add(MyList[i])
}

как вы уже упоминали, вы можете написать его также с foreach. Это будет выглядеть так:

listView1.Columns.Add("S.No")
foreach(var item in MyList)
{
    listView1.Columns.Add(item)
}

во втором примере он также повторяется над списком. Все это скрывает локальную переменную индекса i.

С этим третьим примером вы не собираетесь скрывать и это итерация в функции, которая требует действия, что делать с каждым элементом в списке:

listView1.Columns.Add("S.No")
MyList.ForEach(name => listView1.Columns.Add(name));

под капотом он по-прежнему повторяет все элементы и выполняет некоторые функции для каждого элемента. Вы просто не пишете цикл самостоятельно, но это не означает, что он в любом случае быстрее или лучше, чем ваш подход. Это просто еще один (более короткий) способ сказать, чего вы хотите достичь.