Вы можете сопоставить 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}'"
переносит совпадение с '
с, если оно еще не было заключено в одинарные кавычки.
При вызове первой перегрузки она сразу назовет вторую перегрузку. Это не выполнит ни одного кода в его теле, которым будут двигать во вложенный класс, реализовывая блок итератора. Когда GetEnumerator()
и затем MoveNext()
сначала названы на возвращенном IEnumerable<TTo>
, затем код в Вашей второй перегрузке начнет выполняться.
У меня есть довольно длинная статья о реализации блока итератора, которую можно найти интересным.
Да, потому что возврат урожая просто генерирует класс IEnumerator на компиляции. yield return
просто волшебство компилятора.
Как в стороне... большинство конвертеры типов только работают к/от строкам. Другая интересная опция здесь могла бы быть статическими операторами преобразования, определенными против типа (типов) - у меня есть некоторая.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
.