Extension method to format properties that are not null and not empty I'm trying to work with the following class, which is inside a library I currently cannot change:

// This class represents "external" code as far as my review
// request is concerned: I cannot change this, currently.
public class AddressDto
{
    public string Name { get; set; }
    public string Zip { get; set; }
    public string City { get; set; }
    public string AddressLine { get; set; }
    public string ExtraInfo { get; set; }
}


I'm writing an extension method with c# 5 and .NET 4.5.1 to represent instances of that class as a string for display purposes. I'm looking to get feedback on the inner workings of this method:

// Looking for feedback on this method:
public static string FormatForGui(this AddressDto Address)
{
    if (Address == null) throw new ArgumentNullException("Address");

    var parts = new[] 
    {
        Address.Name,
        Address.AddressLine,
        Address.Zip,
        Address.City
    };

    return string.Join(" ", parts.Where(s =&gt; !String.IsNullOrEmpty(s)));
}


Can this method body be improved?



For your convenience, here's a condensed NUnit unit test to define the behavior:

// Not necessarily looking for feedback on these tests, my actual tests are more DAMP 
// but for brevity I condensed them into one test:
[Test]
public void AllTests()
{
    Assert.Throws&lt;ArgumentNullException&gt;(() =&gt; ((AddressDto)null).FormatForGui());
    Assert.That(new AddressDto { }.FormatForGui(), Is.EqualTo(""));
    Assert.That(new AddressDto { Name = "" }.FormatForGui(), Is.EqualTo(""));
    Assert.That(new AddressDto { Name = "A" }.FormatForGui(), Is.EqualTo("A"));
    Assert.That(new AddressDto { Name = "A", AddressLine = "B" }.FormatForGui(), Is.EqualTo("A B"));
    Assert.That(new AddressDto { Name = "A", AddressLine = "B", Zip = "C" }.FormatForGui(), Is.EqualTo("A B C"));
    Assert.That(new AddressDto { Name = "A", AddressLine = "B", Zip = "C", City = "D" }.FormatForGui(), Is.EqualTo("A B C D"));
    Assert.That(new AddressDto { Name = "A", AddressLine = "B", City = "D" }.FormatForGui(), Is.EqualTo("A B D"));
}
You're asking for a review of a tiny amount of decent code, so there is not much to say.



return string.Join(" ", parts.Where(s =&gt; !String.IsNullOrEmpty(s)));


You're first using string and then String to call a static method. You should be consistent in which one you use.



throw new ArgumentNullException("Address");


If you're using C# 6.0, you could use nameof here:

throw new ArgumentNullException(nameof(Address));


(And Heslacher already mentioned in a comment that it should be address.)



Assert.That(new AddressDto { }.FormatForGui(), Is.EqualTo(""));


I think that Assert.AreEqual() is better, mostly since it's slightly shorter and doesn't use the weird Is pattern:

Assert.AreEqual("", new AddressDto { }.FormatForGui());