using System.Collections.Generic;
using System.Net.Configuration;
using System.Net.Sockets;
using System.Threading.Tasks;
public String FirstName { get; set; }
public String LastName { get; set; }
public DateTime BirthDate { get; set; }
public Address Address { get; set; }
public String Location { get; set; }
public Int32 PostCode { get; set; }
public static class ObjectUtils
public static TResult Safe<TElement, TResult>(this TElement element, Func<TElement, TResult> selector)
if (element != null) return selector(element);
public static TResult Safe<TElement, TResult>(this Nullable<TElement> element, Func<TElement, TResult> selector)
if (element.HasValue) return selector(element.Value);
public static Nullable<TResult> SafeValue<TElement, TResult>(this TElement element, Func<TElement, TResult> selector)
if (element != null) return selector(element);
public static Nullable<TResult> SafeValue<TElement, TResult>(this Nullable<TElement> element, Func<TElement, TResult> selector)
if (element.HasValue) return selector(element.Value);
public static Int32? GetPostCode(Person person)
var postcode = person.Safe(p => p.Address)
.SafeValue(address => address.PostCode);
private static void Main(string[] args)
Person person = new Person
BirthDate = DateTime.Now.AddYears(-10),
Location = "Budapest - Lehel út 13.",
Console.WriteLine(GetPostCode(null));