Перегруженное использование возврата урожая

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

[110 ]

См. Демонстрацию C # .

Заметьте, что я сделал группу захвата ([a-zA-Z0-9]{4}\s?[-]?\s?) в исходном шаблоне без захвата, (?:[a-zA-Z0-9]{4}\s?[-]?\s?).

Строковый литерал $@"('{guid}')|{guid}" создает регулярное выражение, подобное

('[({]?\s?[a-zA-Z0-9]{8}\s?[-]?\s?(?:[a-zA-Z0-9]{4}\s?[-]?\s?){3}\s?[a-zA-Z0-9]{12}\s?[})]?')|[({]?\s?[a-zA-Z0-9]{8}\s?[-]?\s?(?:[a-zA-Z0-9]{4}\s?[-]?\s?){3}\s?[a-zA-Z0-9]{12}\s?[})]?

Первая альтернатива сопоставляет и захватывает GUID внутри одинарных кавычек в Группе 1, а вторая альтернатива сопоставляет GUID в других контекстах. Строка x => x.Groups[1].Success ? x.Value : $"'{x.Value}'" переносит совпадение с ' с, если оно еще не было заключено в одинарные кавычки.

6
задан bendewey 18 June 2009 в 13:54
поделиться

3 ответа

При вызове первой перегрузки она сразу назовет вторую перегрузку. Это не выполнит ни одного кода в его теле, которым будут двигать во вложенный класс, реализовывая блок итератора. Когда GetEnumerator() и затем MoveNext() сначала названы на возвращенном IEnumerable<TTo>, затем код в Вашей второй перегрузке начнет выполняться.

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

4
ответ дан 16 December 2019 в 21:47
поделиться

Да, потому что возврат урожая просто генерирует класс IEnumerator на компиляции. yield return просто волшебство компилятора.

2
ответ дан 16 December 2019 в 21:47
поделиться

Как в стороне... большинство конвертеры типов только работают к/от строкам. Другая интересная опция здесь могла бы быть статическими операторами преобразования, определенными против типа (типов) - у меня есть некоторая.NET 3,5 кода, которые делают это в MiscUtil - видит Convert метод упоминается здесь.

Ре Ваш комментарий:

путем я использую этот метод, должен перевести объект EF в объект DataContract для WCF. так Список (Отели).ConvertTo (SerializableHotels, Отели) ()

Это кажется, что необходимо или использовать сериализацию, или если имена свойства имеют непосредственную связь, возможно, что-то как PropertyCopy<To>.CopyFrom(from) - это снова от MiscUtil (но часть работы Jon на этот раз) - т.е.

public static IEnumerable<TTo> ConvertFrom<TTo, TFrom>(
    this IEnumerable<TFrom> list, TypeConverter converter)
{
    return list.Select(item => PropertyCopy<TTo>.CopyFrom<TFrom>(item);
}

Кроме этого, Вы - вероятно, богатый разговор о a Conversion<,> вместо a TypeConverter.

2
ответ дан 16 December 2019 в 21:47
поделиться
Другие вопросы по тегам:

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