Вы не можете ref
свойство, но если ваши функции нуждаются в доступе get
и set
, вы можете передать экземпляр класса с определенным свойством:
public class Property<T>
{
public delegate T Get();
public delegate void Set(T value);
private Get get;
private Set set;
public T Value {
get {
return get();
}
set {
set(value);
}
}
public Property(Get get, Set set) {
this.get = get;
this.set = set;
}
}
Пример:
class Client
{
private string workPhone; // this could still be a public property if desired
public readonly Property<string> WorkPhone; // this could be created outside Client if using a regular public property
public int AreaCode { get; set; }
public Client() {
WorkPhone = new Property<string>(
delegate () { return workPhone; },
delegate (string value) { workPhone = value; });
}
}
class Usage
{
public void PrependAreaCode(Property<string> phone, int areaCode) {
phone.Value = areaCode.ToString() + "-" + phone.Value;
}
public void PrepareClientInfo(Client client) {
PrependAreaCode(client.WorkPhone, client.AreaCode);
}
}
Решением было:
/\d+({.*?})(?:\d+|$)/
Сначала проверка на добавление цифр с помощью '\ d +', затем групповое совпадение для всего между фигурными скобками, не будучи при этом жадными до '({. *?}) ', и, наконец, исключенное групповое совпадение'?: 'остановит предыдущее групповое совпадение либо с набором цифр' \ d + ', либо в конце слова' $ ',' (?: \ d + | $) '