是否可以将子字符串与 OfType<string> 一起使用?

Is it possible to use substring with OfType<string>?

我在一个学校项目中,我想知道如何在多行文本框中显示 - 而不是列表框,这是问题的一部分 - 如何显示 checkedListBox 的选中项目的前五个字母。我们不能直接显示它们,我们必须使用构造函数创建一个数组,该数组将保存在 User class 中。我的第一个想法是使用 selectedIndexChanged checkListBox 事件并使用递增的 .Items.substring 将选定的子字符串放入数组中。这是我的第一个代码:

private void checkedListBox_programmes_SelectedIndexChanged(object sender, EventArgs e)
    {
        int selection = checkedListBox_programmes.SelectedIndex;

        if (selection != -1)
        {
            if (indice < 5)
            {
                tabProgrammes[indice] = checkedListBox_programmes.Items[selection].ToString().Substring(0, 6);
                indice++;
            }
            else
            {
                MessageBox.Show("Tableau de données est rempli");
            }
        }
    }
}

*tabProgrammes 和 indice 在我的部分初始化 class

这没有用,因为取消选中索引会在我的数组中添加一个字符串。 所以,第二个代码(我使用 buton_click 事件):

// remplissage du tableau avec les éléments sélectionnées
tabProgrammes = checkedListBox_programmes.CheckedItems.OfType<string>().ToArray();

// création du profile
Profil unProfil = new Profil(textBox_Prenom.Text, textBox_Nom.Text, textBox_Utilisateur.Text, dateTimePicker_Naissance.Value, tabProgrammes);

// affichage des donnees
textBox_Affichaqe.Text = unProfil.ToString();

效果非常好,因为我可以毫无问题地选中和取消选中。 SO,我的问题是我只需要将我选中的项目的子字符串 (0,6) 放入我的数组中。 一个想法?

是的,您可以对 OfType<string>() 的结果使用 Substring()

为此,您需要根据具体情况使用 Linq Select() operator

这是一个例子:

static void Main(string[] args)
{
    var dataSource = new object[]
    {
        42,
        "bonjour",
        "allo",
        1000,
        "salut"
    };

    var myStrings = dataSource
        .OfType<string>()
        // In this case, we use substring only if the length of the string is above 6.
        .Select(s => s.Length > 6 ? s.Substring(0, 6) : s)
        .ToArray();

    foreach (var item in myStrings)
    {
        Debug.WriteLine(item);
    }
}

输出如下:

bonjou
allo
salut