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

时间:2013-09-12 22:50:59

标签: c#

我有一组绑定到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);
}

3 个答案:

答案 0 :(得分:1)

我假设主要担心的是大字符数组。以下内容也应该有效......

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++;
}

答案 1 :(得分:1)

在我的头顶上,听起来你可以用你的收藏链接生成的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。

答案 2 :(得分:1)

我实际上并没有手头的编译器,但是如何处理这个问题呢?

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)
});