Using "&&" it will stop the evaluation at the first false, so something like this should work for you:
public class MyClass
{
public string Item1 { get; set; }
public string Item2 { get; set; }
public string Item3 { get; set; }
public string Long { get; set; }
public string Lat { get; set; }
public override string ToString()
{
var sb = new StringBuilder();
var isFullyPopulated =
(AddPropertyData(sb, "{0}", Item1) &&
AddPropertyData(sb, ", item2 {0}", Item2) &&
AddPropertyData(sb, ", item3 {0}", Item3)) &&
AddPropertyData(sb, ", long: {0}, lat: {1}", Long, Lat);
return sb.Length > 0 ? sb.ToString() : Item1;
}
private static bool AddPropertyData(StringBuilder sb, string format, params string[] data)
{
if (data.All(x => !String.IsNullOrWhiteSpace(x)))
{
sb.AppendFormat(format, data);
return true;
}
return false;
}
}