Как заменить метод c # ToString () во время выполнения - PullRequest
0 голосов
/ 25 октября 2019

Как реализовать метод расширения, который может изменить результат ToString () любого объекта?

Что у меня сейчас:

public class ProxyBase
{
    public override string ToString()
    {
        return "hardcodedValue"
    }
}
public static T OverrideToString<T>(this T ob, message) where T : class
{
    var g = new ProxyGenerator();
    var o = new ProxyGenerationOptions();
    o.BaseTypeForInterfaceProxy = typeof(ProxyBase);
    // how to use message parameter here?
    return g.CreateInterfaceProxyWithTarget(ob, o);
}

Я не могу изменить hardcodedValueво время выполнения

Ответы [ 2 ]

1 голос
/ 26 октября 2019

Вот ответ:

public class ProxyBase
{
    public string Message { get; set; }

    public override string ToString()
    {
        return Message;
    }
}

public static T OverrideToString<T>(this T ob, message) where T : class
{
    var g = new ProxyGenerator();
    var o = new ProxyGenerationOptions();
    o.BaseTypeForInterfaceProxy = typeof(ProxyBase);
    var proxied = g.CreateInterfaceProxyWithTarget(ob, o);
    var baseProxy = proxied as ProxyBase;
    baseProxy.Name = message;
    return proxied;
}

Основным вариантом использования является параметризованный тест XUnit, в котором для запуска параметров используется метод ToString () по умолчанию. Если класс параметров не из нашей кодовой базы и мы не можем его унаследовать, это расширение можно использовать, чтобы дать ему понятное имя.

0 голосов
/ 25 октября 2019

Если вы измените «hardcodedvalue» на переменную с помощью onpropertychanged, вы можете установить переменную, и ToString () будет выводить разные вещи.

     private string yourToStringResult
     public string YourToStringResult
     {
         get { return yourToStringResult; }
         set
         {
             yourToStringResult = value;
             OnPropertyChanged("YourToStringResult");
         }
     }

Если вы вернете YourToStringResult в свой ToString, вы можетеизмените значение, которое возвращает ваш ToString.

...