2011-10-05 61 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> 
} 
}