These are mostly personal preferences over specific reasons, but I prefer first, because I think this is a more direct approach. This follows the way I think about this issue. It just seems the opposite to add it to the list and then initialize the value.
The only specific reason I would prefer the former is more resistant to changes in your code. For example, if Foo was later changed from class to structure, it would break script # 2, but not # 1. However, this is pretty far.
In C # 3 and above, you can also simplify this by using a collection initializer.
this.Foos.Add(new Foo() { Prop1="1"; Prop2="2" });
source share