Sobes.tech
Junior — Middle

Wie kann man die Methode LastOrDefault für eine Sammlung implementieren, ohne den Elementtyp im Voraus zu kennen?

sobes.tech KI

Antwort von AI

Чтобы реализовать метод LastOrDefault для коллекции, не зная заранее тип элементов, можно использовать обобщения (generics) и LINQ в C#.

Если коллекция реализует IEnumerable<T>, то можно написать универсальный метод:

public static T LastOrDefaultGeneric<T>(IEnumerable<T> source)
{
    if (source == null) throw new ArgumentNullException(nameof(source));

    T last = default;
    bool foundAny = false;

    foreach (var item in source)
    {
        last = item;
        foundAny = true;
    }

    return foundAny ? last : default;
}

Этот метод перебирает все элементы и возвращает последний, либо значение по умолчанию, если коллекция пуста.

Если тип элементов неизвестен и коллекция не обобщённая (например, IEnumerable), то можно использовать object:

public static object LastOrDefaultNonGeneric(IEnumerable source)
{
    if (source == null) throw new ArgumentNullException(nameof(source));

    object last = null;
    bool foundAny = false;

    foreach (var item in source)
    {
        last = item;
        foundAny = true;
    }

    return foundAny ? last : null;
}

Таким образом, можно получить последний элемент без знания типа заранее.