65.9K
CodeProject is changing. Read more.
Home

Useful wrapper class to override the Object.ToString method

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.64/5 (9 votes)

Sep 2, 2011

CPOL
viewsIcon

39233

A useful wrapper class to override the Object.ToString method.

This class can be useful for when you want to override the Object.ToString method on a type you don't have access to edit.

public class ToStringWrapper<T>
{
    private readonly T _wrappedObject;
    private readonly Func<T, string> _toStringFunction;

    public T WrappedObject
    {
        get { return _wrappedObject; }
    }

    public ToStringWrapper(T wrappedObject, Func<T, string> toStringFunction)
    {
        this._wrappedObject = wrappedObject;
        this._toStringFunction = toStringFunction;
    }

    public override string ToString()
    {
        return _toStringFunction(_wrappedObject);
    }
}

Sample usage: Don't have access to edit the Person type and you want the Name property's value to be returned in the ToString method.

public sealed class Person
{
    public string Name { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        // Person type not wrapped.  Type will be returned in ToString method
        var person = new Person { Name = "TestName" };
        Console.WriteLine(person);

        // Person type wrapped with ToStringWrapper<T> class and supplying
        // a function that will return the Person class's Name property value.
        var personWrapper = new ToStringWrapper<Person>(person, i => i.Name);
        Console.WriteLine(personWrapper);

        Console.ReadKey();
    }
}
Output:
ConsoleApplication1.Person
TestName