Implementation of IpV4Address
I find it more readable if you write the method like the following:

static bool TryParse(string quadDotted, out IpV4Address result)
{
    result = default(IpV4Address);

    if (quadDotted == null)
    {
        return false;
    }

    var elements = quadDotted.Split('.');
    if (elements.Length != 4)
    {
        return false;
    }

    var address = new byte[4];
    for (var i = 0; i &lt; 4; i++)
    {
        if (!byte.TryParse(elements[i], out address[i]))
        {
            return false;
        }
    }

    result = new IpV4Address(address);
    return true;
}


or:

static bool TryParse(string quadDotted, out IpV4Address result)
{
    bool canParse = false; 

    if (quadDotted != null)
    {
        var elements = quadDotted.Split('.');
        if (elements.Length == 4)
        {
            var address = new byte[4];

            // the following part can also be transformed in a do-while cycle
            canParse = byte.TryParse(elements[0], out address[0]);
            for (var i = 1; i &lt; 4 &amp;&amp; canParse; i++)
            {
                canParse = byte.TryParse(elements[i], out address[i]);
            }
        }
    }

    result = canParse ? new IpV4Address(address) : default(IpV4Address);
    return canParse;
}