Ich sach mal so:
Assert(Assigned(list)) schützt vor
fahrlässigem Gebrauch. Der dubbelige Programmier hat vergessen, das Objekt zu erzeugen.
Assert(list is TStrings) schützt vor
bösartigem Gebrauch. Der Programmierer ist ganz schlecht drauf und ruft die Procedure z.B. so auf:
RemoveEmptyStrings(TStrings(Memo1));
Also ich bin eigentlich immer nur fahrlässig; das bösartige überlass' ich den anderen.