Сохранение значений l oop в переменную и использование их вне ее - PullRequest
1 голос
/ 09 января 2020

Я пытаюсь понять, как хранить данные из al oop в переменной и использовать их снаружи.

В качестве примера кода у меня есть строка в переменной, объявленной вне foreach l oop, который является массивом, созданным методом Split:

var features = @GetString(fieldValue);
List<string> optionValues = new List<string>();

foreach(var option in customField.Options)
{
   optionValues.Add(option.customField.Options.Name);
}             

features = string.Join(';', optionValues);

foreach(var str in features.Split(';'))
{
    features = str;
}

Я хочу визуализировать строковые объекты во вспомогательной функции вне ее, например:

@RenderFieldValue(features)

Помощник получает строковый параметр:

@helper RenderFieldValue(string value)
{
    <div>@value</div>
}

Проблема в том, что я вывожу только "part4", которая является последней частью строки. Я пытаюсь понять, как работает программирование в отношении хранения значений из al oop и использовать их все за его пределами. Это должно вывести это:

part1
part2
part3
part4

1 Ответ

1 голос
/ 09 января 2020

Ваша проблема здесь в том, что вы сохраняете ваши новые строки в той же строке , которая была у вас в начале. (Кстати, код, который вы показали нам, не может быть скомпилирован)

У вас есть строка features, вы повторяете разделение в вашем foreach, затем для каждого результата разделения вы заменяете features по результату . Это означает, что на последней итерации вашего foreach последним результатом разбиения станет ваш новый features (в данном случае "", а не "part4", поскольку в конце у вас есть еще один ";").

Итак, теперь вы можете напрямую вызвать @RenderFieldValue() в вашем foreach с str в качестве параметра или изменить поведение @RenderFieldValue() следующим образом:

@helper RenderFieldValue(string value)
{
    @foreach (String s in value.Split(';'))
    {
        <div>@s</div>
    }
}

Где value - ваша строка features.

РЕДАКТИРОВАТЬ

Вот код, показывающий, как работает scope :

class Program
{
    static void Main(string[] args)
    {
        Scope scope = new Scope();

        String works = scope.canBeAccessedOutside;
        String wontWork = scope.cannotBeAccessedOutside; // Compile error.
        String stillWontWork = scope.cannotBeAccessedOutsideThisMethod; // Compile error.

        scope.MethodCanBeAccessedOutside();
        scope.MethodCannotBeAccessedOutside(); // Compile error.
    }
}

class Scope
{
    // Since it is declared inside the class scope, you can use it anywhere in the class, and outside since it is public.
    public String canBeAccessedOutside;

    // Since it is declared inside the class scope, you can use it anywhere in the class, but not outside since it is private.
    private String cannotBeAccessedOutside; 

    // Can be used inside and outside the class.
    public void MethodCanBeAccessedOutside()
    {
        // Can only be used inside this method.
        String cannotBeAccessedOutsideThisMethod;

        MethodCannotBeAccessedOutside(); // Compile since this is in the same class.
    }

    // Can only be used inside this class.
    private void MethodCannotBeAccessedOutside()
    {
        String doesntWork = cannotBeAccessedOutsideThisMethod; // Compile error. 

        String work = cannotBeAccessedOutside;
    }
}

In Чтобы уточнить, l oop scope работает как scope метода или scope class , appart из publi c и частных ключевых слов, так как циклы могут создаваться только внутри метода. Вы можете использовать переменные, которые доступны за пределами вашей области видимости l oop (например, feature в вашем примере) или создавать новые, которые доступны только внутри области видимости l oop. Но не изменяйте ту же переменную, которую вы используете для итерации!

Надеюсь, это поможет!

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