Удалить объект в C# - PullRequest
       0

Удалить объект в C#

0 голосов
/ 26 мая 2020

Я хочу удалить объект в одной из моих функций. Когда объект удаляется, функция должна возвращать истину, в противном случае - ложь. В списке только объекты, учетная запись в foreach l oop представляет объект. Как удалить объект? Мой код выглядит так:

public bool Delete_Account(int id)
{
    foreach (var account in AccountList)
    {
        if (objekt.id == id)
        {
            //delete object here
            return true;
            break;
        }
    }
    return false;
}

Ответы [ 2 ]

4 голосов
/ 26 мая 2020

Невозможно просто удалить объект в C#.

C# - это управляемый язык, что означает, что все выделения / освобождение памяти перемещаются из области действия программиста. Когда вы var x = new object(); -. net CLR (Common Language Runtime) выделяет необходимую память и начинает отслеживать ссылки на эту память.

Когда количество ссылок упало до 0 (т.е. когда вы вернетесь из метода и переменной x исчезает из вашей области действия, или когда вы делаете x = null;) - эта память помечается для удаления, а через некоторое время (нет гарантий, когда, может быть, в следующую миллисекунду, может быть, в следующем месяце) специальная служба под названием G C (Garbage Collector), наконец, освободит эту память.

Итак, просто удалите этот объект из списка, и если он не хранится ни в каком другом списке / переменной, его выделенная память будет когда-нибудь освобождена (опять же, никто не знает когда именно).

Все становится намного интереснее, когда вы начинаете работать с неуправляемыми ресурсами (например, дескрипторами окон ОС), но это уже другая история.

0 голосов
/ 26 мая 2020

Примерно так должно быть:

class Program
{
    static void Main(string[] args)
    {
        var accounts = new List<Account>();

        //Feed list

        var done = DeleteAccount(accounts, 1);

        if (done)
        {
            Console.WriteLine("Account deleted!");
        }
    }

    public static bool DeleteAccount(List<Account> accounts, int id)
    {
        var account = accounts.FirstOrDefault(x => x.Id == id);

        if(account is null)
        {
            return false;
        }

        accounts.Remove(account);
        return true;
    }
}

public class Account
{
    public int Id { get; set; }
    public string Nickname { get; set; }
    //Other properties
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...