A Person class plus a PersonList that inherits from List<Person> and persists entries to a text file. Demonstrates inheritance from a generic collection, basic file I/O with StreamReader / StreamWriter, and constructor-based initialization.
using System;
using System.Collections.Generic;
using System.IO;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public int DniNumber { get; set; }
public char DniLetter { get; set; }
public Person(string name, int age, int dniNumber, char dniLetter)
{
Name = name;
Age = age;
DniNumber = dniNumber;
DniLetter = dniLetter;
}
public override string ToString()
=> $"Name: {Name}\nAge: {Age}\nDNI: {DniNumber}-{DniLetter}";
}
public class PersonList : List<Person>
{
private readonly string filePath;
public PersonList(string filePath)
{
this.filePath = filePath;
Load();
}
private void Load()
{
if (!File.Exists(filePath))
{
Console.WriteLine("Data file does not exist. A new one will be created on save.");
return;
}
try
{
using var reader = new StreamReader(filePath);
while (!reader.EndOfStream)
{
string name = reader.ReadLine();
int age = int.Parse(reader.ReadLine());
int dniNumber = int.Parse(reader.ReadLine());
char dniLetter = char.Parse(reader.ReadLine());
this.Add(new Person(name, age, dniNumber, dniLetter));
reader.ReadLine(); // blank separator
}
Console.WriteLine("Data loaded successfully.");
}
catch (Exception ex)
{
Console.WriteLine("Error loading data: " + ex.Message);
}
}
public void List()
{
foreach (var person in this)
{
Console.WriteLine(person);
Console.WriteLine();
}
}
public void Save()
{
try
{
using var writer = new StreamWriter(filePath);
foreach (var person in this)
{
writer.WriteLine(person.Name);
writer.WriteLine(person.Age);
writer.WriteLine(person.DniNumber);
writer.WriteLine(person.DniLetter);
writer.WriteLine();
}
Console.WriteLine("Data saved successfully.");
}
catch (Exception ex)
{
Console.WriteLine("Error saving data: " + ex.Message);
}
}
public void AddPerson(Person person)
{
this.Add(person);
Console.WriteLine($"Added {person.Name} to the list.");
}
public void RemoveAtIndex(int oneBasedIndex)
{
int index = oneBasedIndex - 1;
if (index < 0 || index >= this.Count)
{
Console.WriteLine("Index out of range.");
return;
}
var removed = this[index];
this.RemoveAt(index);
Console.WriteLine($"Removed {removed.Name} from the list.");
}
}
// Usage
string filePath = "person-data.txt";
var people = new PersonList(filePath);
people.List();
people.AddPerson(new Person("Pedro", 34, 12123434, 'F'));
people.AddPerson(new Person("Maria", 28, 98765432, 'A'));
people.AddPerson(new Person("Juan", 40, 56789012, 'B'));
people.Save();
people.RemoveAtIndex(2);
people.List();
people.Save();
Console.WriteLine($"Full path: {Path.GetFullPath(filePath)}");