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 isFullyPopulatedtempVar = (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; } }