2011-10-05 60 views
0

我试图用C#通过数组迭代数组进行迭代。使用for循环使用C#

该阵列由字母表的字母。

我这样做是内嵌在视图中,我知道是不理想的。但是,对于每个字母,我需要将HTML写入文档。

基本上,我需要做下面的JS - 只是不知道C#语法:

var myArray = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //I think ToCharArray(); 
for (var i=0, i < myArray.length, i++) 
{ 
    if (somecondition) 
    { 
     write some html; 
    } 
    else 
    { 
     write some other html; 
    } 
} 

现在有一个用户控件26个版本这一点。我是前端开发人员,这是交由我的后端。试图找到一种更有效的方法来实现可维护性。

<% if (Convert.ToInt32(Model.State.Cities.GetCityCountByAlphabet("A")) == 0) { %> 
<span class="no-link">A</span> 
<% } else { %> 
<a href="#to-A">A</a> 
<% } %> 
+0

这是一个家庭作业吗?如果是的话,没关系,但它会改变答案。如果不是,你应该有一个很好的理由想要这样做。你能告诉我们这样做的理由是什么,以便我们可以给你一个比“foreach(var item in myArray){// do stuff}”更合理的答案“ –

+0

我对此做了一些研究,似乎弄明白了。我根本不知道C#。希望我看起来不像一个懒鬼。 – user699242

+0

这是.net网页表单吗?替换你添加的代码会很好,但是使用一些内置的Web表单数据绑定控件(如中继器或其他东西)会更好。在这种情况下,这是一个选项,还是必须全部写入“代码前置”(即aspx文件中的内联代码)? –

回答

5

C#的字符串,也可以使用像数组:

for (int i = 0; i < str.Length; i++) 
    //str[i] is a char 
+1

只是不分配。 – canon

+0

...因为字符串是不可变的。 – SLaks

+0

是的,这就是为什么。 – canon

5

最简单的方法在字符遍历字符串中的是使用foreach

foreach (char c in yourString) 
{ 
    // ... 
} 

这也将工作在一个数组上。

如果你只是想遍历字母A到Z,为了你甚至不需要存储包含所有字母的字符串。您可以使用它代替:

for (char c = 'A'; c <= 'Z'; c++) 
{ 
    // ... 
} 
0

访问字符串的第n个字符使用

myArray[i] 

,会做

0

它只是相同的,如果你希望它是:

var myArray = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //I think ToCharArray(); 
for (var i=0; i < myArray.Length; i++) { 
    char letter = myArray[0]; 
    if (somecondition) { 
     write some html; 
    } else { 
     write some other html; 
    } 
} 
0
var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
foreach(char ch in characters) 
{ 
    if (somecondition) 
    { 
     Response.Write("some html"); 
    } 
    else 
    { 
     Repsonse.Write("some other html"); 
    } 
} 
0

您可以使用:

Char c = myArray[i]; 

或者是这样的:

StringBuilder html = new StringBuilder(); 
foreach(Char c in myArray) 
{ 
    if (c = something) 
     html.Append(somehtml); 
    else 
     html.Append(otherhtml); 
} 

我希望这会帮助你。

13

其他的答案是合理的,但我个人会倾向于简单地写

foreach(char c in "ABCDEFGHIJKLMNOPQRSTUVWXYZ") 
{ ... } 

,并跳过索引,局部变量,等等等等。

更普遍的:如果你的问题,每次解决技术,你不知道C#的语法将是问在计算器上,你不会是在工作中非常有效。为什么不学习基本的C#?如果你已经理解JavaScript应该不会太难拿起基本成语和程序代码的语法。类型系统是相当不同的,但基本的控制流程非常相似。

1

其实我做了这样的事情在几年前,所以我拉起我的代码,并修改它,试图证明它基于一个例子中,你已经证明什么:

  <div id="azindex"> 
      <ul id="index"> 
      <% 
      var myArray = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray(); 
      var letters = Model.State.Cities.Select(city => city.Name[0]).Distinct(); //assume array setup based on same database values 
      var letterArray = myArray.Where(chr => letters.Any(letter => letter == chr)); 
      foreach (var letter in letters) 
      { 
      %> 
       <li><a href='#<%= letter %>'><%= letter %></a></li> 
      <% 
      } 
      %> 
      </ul> 
     </div> 

使用例如假设如果条件不匹配,我想修改我的代码有点类似于下面的不可编译的代码:

for (var i=0; i < myArray.Length; i++) 
{ 
var letter = myArray[i]; 
if (letters.Any(p => p == letter) 
{ 
    <span class="no-link">{letter}</span> 
} 
else 
{ 
    <a href="#to-{letter}">{letter}</a> 
} 
}