2011-06-03 55 views
4

,所以我显示从开始的每一个名称的第一个字母,一路到Z如何让这个更好的代码和更优化的

一些事情是这样的:

一个
安东尼
艾伦
...


鲍勃
生成器
....

Ç
Charyl
卡尔
...
ž
Zoah
....

我怎样才能使这个代码更优化,使用更少线?

int _a = 0; 
int _b = 0; 
int _c = 0; 
... 
... 
.. 
int _z = 0; 

protected void ListItem(List<Customer>.Enumerator cust) 
{ 

if (cust.MoveNext()) 
{ 
    Customer t = cust.Current; 

string[] list = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "v", "z" }; 
var output = list.Aggregate("", (current, listitem) => current + (Environment.NewLine + "<h1 id='" + listitem.ToUpper() + "'><span>" + listitem.ToUpper() + "</span></h1>")); 
string _name = t.Name.Substring(0, 1).ToUpper(); 


if (_name == list[0].ToUpper()) 
{ 
    if (_a == 0) 
    { 
     l = new Literal(); 
     l.Text = "<h1 id='A'><span>A</span></h1>" + Environment.NewLine; 
     ..... 
     _a = 1; 
    } 
if (_name == list[1].ToUpper()) 
{ 
    if (_b == 0) 
    { 
    l = new Literal(); 
    l.Text = "<h1 id='B'><span>A</span></h1>" + Environment.NewLine; 
    ..... 
    _b = 1; 
    } 
} 
... 
.... 
.... 
... 

doing through Z 

} 

回答

1

我会改变重复代码这种想法。

List<char> HeaderOf = new List<char>(); 

protected void ListItem(List<Customer>.Enumerator cust) 
{ 
    if (cust.MoveNext()) 
    { 
     Customer t = cust.Current; 
     string[] list = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "v", "z" }; 
     var output = list.Aggregate("", (current, listitem) => current + (Environment.NewLine + "<h1 id='" + listitem.ToUpper() + "'><span>" + listitem.ToUpper() + "</span></h1>")); 

     char CheckMe = t.Name.Substring(0, 1).ToUpper()[0]; 
     if (!HeaderOf.Contains(CheckMe)) 
     { 
      HeaderOf.Add(CheckMe); 

      l = new Literal(); 
      l.Text = "<h1 id='" + CheckMe + "'><span>" + CheckMe + "</span></h1>" + Environment.NewLine; 
     } 
    } 
} 
+0

@Abu欢迎您。 – Aristos 2011-06-04 02:02:54

3
List<Customer> myList; 


//produces a sequence of strings with the format: 
//<h1 id="A"><span>A</span></h1> 
//Anthony<br /> 
//... 
var stringValues = 
    myList 
     .GroupBy(c => c.Name[0].ToUpper()) 
     .OrderBy(g => g.Key) 
     .Select(g => string.Format(
      "<h1 id=\"{0}\"><span>{0}</span></h1>{1}\n", 
      g.Key, 
      g.Aggregate("", (a,i) => string.Format(
       "{0}<br />\n", 
       i.Name)))); 

foreach(var stringValue in stringValues) 
{ 
    var l = new Literal(); 
    li.Text = stringValue; 
    //not sure what you're doing with the literal from here... 
} 
+0

+1好用的lambda! – 2011-06-04 00:33:45

+0

为什么不在标记中进行表示/布局? – dwerner 2011-06-04 04:35:49

+0

@serotonin一次一步:) – 2011-06-04 21:28:05