using System;
public class Test
{
public static void Main()
{
var domainObject = new DomainObject("Leri");
var dto = domainObject.ToDTO();
Console.WriteLine(dto.Name);
}
}
public class DomainObject {
private readonly string _name;
public string Name { get { return _name; } }
// some useful methods
public DomainObject(string name) {
_name = name;
}
}
public class DataTransferObject {
public string Name { get; set; }
}
public static class ConverterExtension {
public static DataTransferObject ToDTO(this DomainObject domainObject) {
/**
* Always check for null because extension calls are not virtual calls
* so NullReferenceException won\'t be thrown if called on null.
*/
if (domainObject == null) {
throw new ArgumentNullException("domainObject");
}
return new DataTransferObject {
Name = domainObject.Name
};
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciBkb21haW5PYmplY3QgPSBuZXcgRG9tYWluT2JqZWN0KCJMZXJpIik7CgkJdmFyIGR0byA9IGRvbWFpbk9iamVjdC5Ub0RUTygpOwoJCQoJCUNvbnNvbGUuV3JpdGVMaW5lKGR0by5OYW1lKTsKCX0KfQoKcHVibGljIGNsYXNzIERvbWFpbk9iamVjdCB7Cglwcml2YXRlIHJlYWRvbmx5IHN0cmluZyBfbmFtZTsKCQoJcHVibGljIHN0cmluZyBOYW1lIHsgZ2V0IHsgcmV0dXJuIF9uYW1lOyB9IH0KCQoJLy8gc29tZSB1c2VmdWwgbWV0aG9kcwoJCglwdWJsaWMgRG9tYWluT2JqZWN0KHN0cmluZyBuYW1lKSB7CgkJX25hbWUgPSBuYW1lOwoJfQp9CgpwdWJsaWMgY2xhc3MgRGF0YVRyYW5zZmVyT2JqZWN0IHsKCXB1YmxpYyBzdHJpbmcgTmFtZSB7IGdldDsgc2V0OyB9Cn0KCnB1YmxpYyBzdGF0aWMgY2xhc3MgQ29udmVydGVyRXh0ZW5zaW9uIHsKCXB1YmxpYyBzdGF0aWMgRGF0YVRyYW5zZmVyT2JqZWN0IFRvRFRPKHRoaXMgRG9tYWluT2JqZWN0IGRvbWFpbk9iamVjdCkgewoJCS8qKgoJCSAqIEFsd2F5cyBjaGVjayBmb3IgbnVsbCBiZWNhdXNlIGV4dGVuc2lvbiBjYWxscyBhcmUgbm90IHZpcnR1YWwgY2FsbHMKCQkgKiBzbyBOdWxsUmVmZXJlbmNlRXhjZXB0aW9uIHdvblwndCBiZSB0aHJvd24gaWYgY2FsbGVkIG9uIG51bGwuCgkJICovIAoJCWlmIChkb21haW5PYmplY3QgPT0gbnVsbCkgewoJCQl0aHJvdyBuZXcgQXJndW1lbnROdWxsRXhjZXB0aW9uKCJkb21haW5PYmplY3QiKTsKCQl9CgkJCgkJcmV0dXJuIG5ldyBEYXRhVHJhbnNmZXJPYmplY3QgewoJCQlOYW1lID0gZG9tYWluT2JqZWN0Lk5hbWUKCQl9OwoJfQp9