Member 14633063 Ответов: 1

Проблема передачи экземпляра класса в качестве параметра подпрограммы


Я пытаюсь передать экземпляр нижеприведенного класса "фильтры" в подпрограмму

public class Filters       // found in namespace SQLClass
{
    public Filters()
   {
        FirstNameFilter = "";
        LastNameFilter = "";
        AddressFilter = "";
        CityFilter = "";
        ZipCodeFilter = "";
    }

    public string FirstNameFilter { get; set; }
    public string LastNameFilter { get; set; }
    public string AddressFilter { get; set; }
    public string CityFilter { get; set; }
    public string ZipCodeFilter { get; set; }
}


Ниже приведена моя попытка создать экземпляр класса и передать его в подпрограмму:

        private void FrmMain_Load(object sender, EventArgs e)
        {
            CenterToParent();
            Filters ListFilters = new SQLClass.Filters();
            PopulateListView(ListFilters, "Last Name/First Name/City/Address");
// The above line gets error "Argument 1: Cannot convert from 'SQLClass.Filters' to 'ListFilters'"
        }

private void PopulateListView(ListFilters>, string OrderBy)
// The above line gets error "The type or namespace name 'ListFilters' could not be found (are you missing a using directive or an assembly reference?)"
        {
            SQLDatabase MySQLClass = new SQLDatabase();

            string TheDatabase = "CustomerDB";
            string TheProcedure = "usp_GetCustomers";
            Dictionary<string, ParameterValues> TheParams = new Dictionary<string, ParameterValues>();

            ParameterValues values = new ParameterValues();

            values = new ParameterValues(); values.Value = ListFilters.FirstNameFilter; values.Direction = "Input"; 
// The above line gets error "The name 'ListFilters' does not exist in the current context"
TheParams.Add("@parmFirstName", values);
            values = new ParameterValues(); values.Value = ListFilters.LastNameFilter; values.Direction = "Input"; TheParams.Add("@parmLastName", values);
            values = new ParameterValues(); values.Value = ListFilters.AddressFilter; values.Direction = "Input"; TheParams.Add("@parmAddress", values);
            values = new ParameterValues(); values.Value = ListFilters.CityFilter; values.Direction = "Input"; TheParams.Add("@parmCity", values);
            values = new ParameterValues(); values.Value = ListFilters.ZipCodeFilter; values.Direction = "Input"; TheParams.Add("@parmZipCode", values);
            values = new ParameterValues(); values.Value = OrderBy; values.Direction = "Input"; TheParams.Add("@parmOrderBy", values);


Что я уже пробовал:

Сообщения об ошибках отображаются в виде комментариев. Я пробовал различные способы кодирования. Я предполагаю / надеюсь, что ответ прост.

1 Ответов

Рейтинг:
7

Dave Kreskowiak

Во-первых, у вас есть класс, или "тип", называемый фильтрами.

Затем вы создаете экземпляр этого типа, называя его "ListFilters". Кстати, вы должны использовать camelCase, чтобы назвать свои переменные "listFilters".

Затем вы пытаетесь передать эту переменную методу, который ожидает первый параметр типа ListFilters. Это не имеет ничего общего с тем, что вы назвали переменной. Он не должен называться "listFilters" или "ListFilters".

Эта линия:

private void PopulateListView(ListFilters>, string OrderBy)

это плохо. Первый параметр определен неверно. Каждый параметр должен определять тип, который ожидается в этой позиции, и переменную, которая будет содержать эти данные внутри метода.

Я думать ты пытаешься сделать что-то вроде этого:
private void PopulateListView(Filters listFilters, string orderBy)


Member 14633063

Вы, конечно, правы.
Я не следовал ни одному из основных правил C#.
Спасибо.

CPallini

5.