1

我有一组绑定到 a 的对象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);
}
4

3 回答 3

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++;
}
于 2013-09-12T22:57:10.743 回答
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。

于 2013-09-12T23:33:02.247 回答
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)
});
于 2013-09-12T23:43:11.670 回答