带有字母字符的 C# 前缀单选按钮列表选项

本文关键字:前缀 单选按钮 列表 选项 字符 | 更新日期: 2023-09-27 18:31:18

我有一个绑定到System.Web.UI.WebControls.ListControl的对象集合:

foreach (var answer in SomeCollection)
{
    System.Web.UI.WebControls.ListItem listItem = new System.Web.UI.WebControls.ListItem();
    listItem.Value = answer.ID.ToString();
    listItem.Text = answer.AnswerText;
    listControl.Items.Add(listItem);
}

我现在想为"A"、"B"、"C"、"D"等的每个答案添加一个前缀。因此,输出如下所示:

A. Answer 1
B. Answer 2
C. Answer 3

我们拥有的最多答案是 10 个,因此无需担心用完字母。正确的方法是什么?

我已经尝试了以下内容并且它有效,但是我觉得应该有更好的方法:

char[] alphabet = new char[]{ 'A', 'B', 'C', 'D', 'E', 'F', 'G',..., 'Y', 'Z' };
for (int i = 0; i < SomeCollection.Count; i++)
{
    var answer = SomeCollection[i]
    System.Web.UI.WebControls.ListItem listItem = new System.Web.UI.WebControls.ListItem();
    listItem.Value = answer.ID.ToString();
    listItem.Text = alphabet[i] + "." + answer.AnswerText;
    listControl.Items.Add(listItem);
}

带有字母字符的 C# 前缀单选按钮列表选项

我假设主要关注的是大字符数组。以下也应该有效...

char letter = 'A';
for (int i = 0; i < SomeCollection.Count; i++)
{
    var answer = SomeCollection[i]
    System.Web.UI.WebControls.ListItem listItem = new System.Web.UI.WebControls.ListItem();
    listItem.Value = answer.ID.ToString();
    listItem.Text = letter + "." + answer.AnswerText;
    listControl.Items.Add(listItem);
    letter++;
}

在我的头顶上,听起来你可以压缩一个生成的 Enum.Range.字符范围与你的集合......也许是这样的:

    var someCollection = new List<string> {"Item1", "Item2", "Item3"};
    var prefixes = Enumerable.Range('a', 'z' - 'a' + 1).Select(x => (char)x);
    ...
    var items = prefixes.Zip(someCollection, (a,b) => a + " " + b);

这样做,您可以将项目集合直接分配给您的 listControl。

我手头实际上没有编译器,但是类似的东西怎么样?

var charcode = (int)'A';
var items = SomeCollection.Select((answer, index) => new ListItem{
    Value = answer.ID,
    Text = String.Format("{0}.{1}", (char)(charcode+index), answer.AnswerText)
});