/// <summary>
 /// Speichert den Inhalt eines <see cref="Contact"/>-Objekts als vCard-Datei (.vcf).
 /// </summary>
 /// <param name="contact">Das zu speichernde <see cref="Contact"/>-Objekt. Wenn <paramref name="contact"/> keine Daten enthält,
 /// wird keine Datei erzeugt.</param>
 /// <param name="fileName">Der Dateipfad der zu erzeugenden VCF-Datei.
 /// Existiert die Datei schon, wird sie überschrieben.</param>
 /// <param name="version">Dateiversion der zu speichernden VCF-Datei.</param>
 ///
 /// <remarks>
 /// <para>
 /// Die Methode ruft auf <paramref name="contact"/>&#160;<see cref="Contact.Clean"/> auf. Wenn
 /// die Eigenschaft <see cref="Contact.IsEmpty"/> von <paramref name="contact"/> danach <c>true</c> zurückgibt, wird eine keine Datei erzeugt.
 /// Falls es unerwünscht ist, dass die Methode <paramref name="contact"/> durch den Aufruf von <see cref="Contact.Clean"/> ändert,
 /// können Sie vorher mit <see cref="Contact.Clone"/> eine
 /// Kopie von <paramref name="contact"/> erstellen und der Methode dann die Kopie übergeben.
 /// </para>
 /// <para>Zum Speichern mehrerer <see cref="Contact"/>-Objekte in einer gemeinsamen VCF-Datei eignet sich die
 /// Methode <see cref="ContactPersistence.SaveVcf(string, IEnumerable{Contact?}, VCardVersion)"/> oder die
 /// Erweiterungsmethode <see cref="ContactCollectionExtension.SaveVcf(IEnumerable{Contact?}, string, VCardVersion)"/>.
 /// </para>
 /// </remarks>
 ///
 /// <exception cref="ArgumentNullException"><paramref name="contact"/> oder <paramref name="fileName"/> ist <c>null</c>.</exception>
 /// <exception cref="ArgumentException">
 /// <para><paramref name="fileName"/> ist kein gültiger Dateipfad.</para>
 /// <para>- oder -</para>
 /// <para><paramref name="version"/> hat einen nichtdefinierten Wert.</para>
 /// </exception>
 /// <exception cref="IOException">Die Datei konnte nicht geschrieben werden.</exception>
 public static void SaveVcf(this Contact contact, string fileName, VCardVersion version = VCardVersion.V3_0)
 => VcfWriter.Write(contact, fileName, version);
 /// <summary>
 /// Speichert den Inhalt einer Sammlung von <see cref="Contact"/>-Objekten in eine gemeinsame
 /// vCard-Datei (*.vcf).
 /// </summary>
 ///
 /// <param name="fileName">Der Dateipfad der zu erzeugenden VCF-Datei.
 /// Existiert die Datei schon, wird sie überschrieben.</param>
 /// <param name="contacts">
 /// <para>
 /// Die zu speichernde Sammlung von <see cref="Contact"/>-Objekten.
 /// </para>
 /// <para>
 /// Die Sammlung darf leer sein oder <c>null</c>-Werte
 /// enthalten. Wenn die Sammlung kein <see cref="Contact"/>-Objekt enthält, das Daten enthält, wird keine Datei erzeugt.
 /// </para>
 /// </param>
 /// <param name="version">Dateiversion der zu speichernden vCard.</param>
 ///
 /// <remarks>
 /// <para>
 /// Die Methode ruft auf allen als Argument übergebenen <see cref="Contact"/>-Objekten <see cref="Contact.Clean"/> auf. Alle
 /// <see cref="Contact"/>-Objekte deren Eigenschaft <see cref="Contact.IsEmpty"/> danach <c>true</c> zurückgibt, werden nicht in
 /// die Datei geschrieben.
 /// </para>
 /// <para>
 /// Falls es unerwünscht ist, dass die Methode die <see cref="Contact"/>-Objekte durch den Aufruf von <see cref="Contact.Clean"/> ändert,
 /// können Sie vorher mit <see cref="Contact.Clone"/>
 /// Kopien der <see cref="Contact"/>-Objekte erstellen und der Methode dann die Kopien übergeben.
 /// </para>
 /// </remarks>
 ///
 /// <exception cref="ArgumentNullException"><paramref name="contacts"/> oder <paramref name="fileName"/> ist <c>null</c>.</exception>
 /// <exception cref="ArgumentException">
 /// <para><paramref name="fileName"/> ist kein gültiger Dateipfad.</para>
 /// <para>- oder -</para>
 /// <para><paramref name="version"/> hat einen nichtdefinierten Wert.</para>
 /// </exception>
 /// <exception cref="IOException">Die Datei konnte nicht geschrieben werden.</exception>
 public static void SaveVcf(string fileName, IEnumerable <Contact?> contacts, VCardVersion version = VCardVersion.V3_0)
 => VcfWriter.Write(contacts, fileName, version);