Что шаблон должен использовать для итерации по связанным множествам значений?

Что такое объявление функции цикла?

И еще немного информации?

Вот пример из Microsoft Docs.

using System;
using System.Threading;

public class Work
{
    public static void Main()
    {
        // Start a thread that calls a parameterized static method.
        Thread newThread = new Thread(Work.DoWork);
        newThread.Start(42);

        // Start a thread that calls a parameterized instance method.
        Work w = new Work();
        newThread = new Thread(w.DoMoreWork);
        newThread.Start("The answer.");
    }

    public static void DoWork(object data)
    {
        Console.WriteLine("Static thread procedure. Data='{0}'",
            data);
    }

    public void DoMoreWork(object data)
    {
        Console.WriteLine("Instance thread procedure. Data='{0}'",
            data);
    }
}
// This example displays output like the following:
//       Static thread procedure. Data='42'
//       Instance thread procedure. Data='The answer.'

ссылка: https://msdn.microsoft.com/en-us/library/1h2f2459 (v = vs.110)

5
задан Robert Rossney 6 March 2009 в 19:13
поделиться

5 ответов

В.NET 4.0 они добавляют метод расширения "Zip" к IEnumerable, таким образом, Ваш код мог посмотреть что-то как:

foreach (var item in entTypes.Zip(dateFields, 
    (entType, dateField) => new { entType, dateField }))
{
    // do stuff with item.entType and item.dateField
}

На данный момент я думаю, что самая легкая вещь сделать оставить его как для цикла. Существуют приемы, посредством чего можно сослаться на "другой" массив (при помощи перегрузки Выбора (), который обеспечивает индекс, например), но ни один из них не так чист как простое для итератора.

Вот сообщение в блоге о Zip, а также способе реализовать его самостоятельно. Должен получить Вас идущий тем временем.

3
ответ дан 14 December 2019 в 13:48
поделиться

Создать структуру?

struct Item
{
    string entityType;
    string dateField;
}

В значительной степени то же как Ваше решение Pythonic, кроме безопасного с точки зрения типов.

2
ответ дан 14 December 2019 в 13:48
поделиться

Можно использовать пару и универсальный Список.

List<Pair> list = new List<Pair>();

list.Add(new Pair("DOC", "DocDate"));
list.Add(new Pair("CON", "ConUserDate"));
list.Add(new Pair("BAL", "BalDate"));

foreach (var item in list)
{
    string entType = item.First as string;
    string dateField = item.Second as string;

    // DO STUFF
}

Пара является частью сети. UI, но можно легко создать собственный класс или структуру.

0
ответ дан 14 December 2019 в 13:48
поделиться

Если Вы просто хотите объявить встроенные списки, можно сделать это за один шаг:

var entities = new Dictionary<string, string>() {
    { "DOC", "DocDate" },
    { "CON", "ConUserDate" },
    { "BAL", "BalDate" },
};
foreach (var kvp in entities) {
    // do stuff with kvp.Key and kvp.Value
}

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

0
ответ дан 14 December 2019 в 13:48
поделиться

Это - действительно вариация на другие темы, но это добилось бы цели также...

var items = new[]
          {
              new { entType = "DOC", dataField = "DocDate" },
              new { entType = "CON", dataField = "ConUserData" },
              new { entType = "BAL", dataField = "BalDate" }
          };

foreach (var item in items)
{
    // do stuff with your items
    Console.WriteLine("entType: {0}, dataField {1}", item.entType, item.dataField);
}
1
ответ дан 14 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: