Использование цикла for для перебора массива с использованием C # - PullRequest
0 голосов
/ 06 октября 2011

Я пытаюсь использовать 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>
<% } %>

Ответы [ 8 ]

13 голосов
/ 06 октября 2011

Остальные ответы разумны, но лично я был бы склонен просто написать

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

и пропустите индексатор, локальная переменная, бла-бла-бла.

В целом: если ваша техника решения проблем каждый раз, когда вы не знаете синтаксис C #, будет запрашиваться в StackOverflow, вы не будете очень эффективны в работе. Почему бы не изучить базовый C #? Если вы уже понимаете JavaScript, не должно быть слишком сложно подобрать основные идиомы и синтаксис процедурного кода. Система типов отличается, но основные потоки управления очень похожи.

5 голосов
/ 06 октября 2011

Самый простой способ перебора символов в строке - использовать foreach:

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

Это также будет работать с массивом.

Если вы просто хотите перебрать буквы от A до Z, чтобы вам даже не нужно было хранить строку, содержащую все буквы. Вместо этого вы можете использовать это:

for (char c = 'A'; c <= 'Z'; c++)
{
    // ...
}
5 голосов
/ 06 октября 2011

C # строки также могут использоваться как массивы:

for (int i = 0; i < str.Length; i++) 
    //str[i] is a char
1 голос
/ 06 октября 2011

Я действительно сделал что-то подобное несколько лет назад, поэтому я поднял свой код и изменил его, чтобы попытаться показать его в качестве примера на основе того, что вы показали:

            <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>

Предполагая использование вашегоНапример, когда вы хотите написать какой-нибудь другой html, когда условие не соответствует, я бы изменил свой код, немного похожий на следующий некомпилируемый код:

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>
}
}
0 голосов
/ 06 октября 2011

Вы можете использовать:

Char c = myArray[i];

или как-то так:

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

Я надеюсь, что это поможет вам.

0 голосов
/ 06 октября 2011
var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
foreach(char ch in characters) 
{
    if (somecondition) 
    {
        Response.Write("some html");
    } 
    else 
    {
        Repsonse.Write("some other html");
    }
}
0 голосов
/ 06 октября 2011

Это примерно то же самое, если вы хотите, чтобы это было:

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 голосов
/ 06 октября 2011

для доступа к n-му символу строки используйте

myArray[i]

, который будет делать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...