Функция базы данных - PullRequest
       5

Функция базы данных

0 голосов
/ 03 июля 2018

Я хочу запрограммировать функцию C # для обработки всех вызовов базы данных, которые возвращают list<>. Теперь, поскольку я хочу, чтобы эта функция обрабатывала несколько типов списков, я должен иметь возможность передавать любой тип списка в функцию (например, List<Student>, List<Teacher>). Я только что нашел один подход к решению, который мне не совсем понравился, поскольку я не могу вернуть значение с помощью моего подхода:

    private void Execute<T>(string strSql, List<T> list)
    {
        using (OracleConnection conn = new OracleConnection(cnnStr))
        {
            using (OracleCommand objCommand = new OracleCommand(strSql, conn))
            {
                objCommand.CommandType = CommandType.Text;
                DataTable dt = new DataTable();
                OracleDataAdapter adp = new OracleDataAdapter(objCommand);
                conn.Open();
                adp.Fill(dt);
                if (dt != null)
                {
                    GetListType(list)
                    list = ConvertToList(dt).ToList();
                }
            }
        }
    }

Поскольку мой параметр - List<T>, невозможно вернуть значение, поскольку функция должна быть недействительной.

Любое предложение, как я мог бы передать любой список в функции, а также иметь возможность вернуть список?

Большое спасибо заранее

1 Ответ

0 голосов
/ 03 июля 2018

Вы можете использовать опорный параметр. Он передаст ваш список по ссылке и позволит изменить его в вызывающей подпрограмме.

private void Execute<T>(string strSql, ref List<T> list)
{
    using (OracleConnection conn = new OracleConnection(cnnStr))
    {
        using (OracleCommand objCommand = new OracleCommand(strSql, conn))
        {
            objCommand.CommandType = CommandType.Text;
            DataTable dt = new DataTable();
            OracleDataAdapter adp = new OracleDataAdapter(objCommand);
            conn.Open();
            adp.Fill(dt);
            if (dt != null)
            {
                GetListType(list)
                list = ConvertToList(dt).ToList();
            }
        }
    }
}

Или используйте параметр out, который необходимо сначала объявить в вызывающей подпрограмме

private void Execute<T>(string strSql, List<T> list, out List<T> returnList)
{
    using (OracleConnection conn = new OracleConnection(cnnStr))
    {
        using (OracleCommand objCommand = new OracleCommand(strSql, conn))
        {
            objCommand.CommandType = CommandType.Text;
            DataTable dt = new DataTable();
            OracleDataAdapter adp = new OracleDataAdapter(objCommand);
            conn.Open();
            adp.Fill(dt);
            if (dt != null)
            {
                GetListType(list)
                list = ConvertToList(dt).ToList();
            }
        }
    }

    returnList = list;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...