Привет Я хотел бы создать динамическую универсальную функцию ввода, которая позволяет пользователю выбирать вход из списка входов, а затем возвращать это. Для списка элементов я хочу использовать словарь.C# Общая функция словаря
Для декларации я думал вдоль линий следующее:
public static DialogResult InputBox<KeyType, ValueType>(string aTitle, string aPromptText, Dictionary<KeyType, ValueType> aDictionary, ref KeyValuePair<KeyType, ValueType> aReturnPair)
У меня уже есть две аналогичные функции, один для даты и один для строк.
Но я хочу знать, что словарь возможен? Как мне обрабатывать кастинг? Должен ли я передавать тип ключа и значение, или я могу получить его во время выполнения?
также можно указать функцию «» использовать для извлечения имени использовать для отображения Например, у меня есть следующая структура:
public struct Person
{
public int Age;
public string Name;
public string Surname;
}
Как я могу сказать функции использовать Person.Surname для показа?
Пример использования:
Dictionary<int, Person> Persons = new Dictionary<int,Person>();
KeyValuePair<int, Person> lPair= new KeyValuePair<int,Person>
DialogResult dialogResult = DialogResult.Cancel
While (dialogResult == DialogResult.Cancel)
{
dialogResult = CustomForm.InputBox<int, Person>("title", "prompt", Persons, ref lPair, Person.Surname);
}
функция ввода Строка
public static DialogResult InputBox(string aTitle, string aPromptText, ref string aValue, Boolean aPassword = false)
{
Form lForm = new Form();
Label lLabel = new Label();
TextBox lTextBox = new TextBox();
Button lButtonOk = new Button();
Button lButtonCancel = new Button();
lForm.Text = aTitle;
lLabel.Text = aPromptText;
lTextBox.Text = aValue;
if (aPassword)
{
lTextBox.PasswordChar = '*';
}
lButtonOk.Text = "OK";
lButtonCancel.Text = "Cancel";
lButtonOk.DialogResult = DialogResult.OK;
lButtonCancel.DialogResult = DialogResult.Cancel;
lLabel.SetBounds(9, 20, 372, 13);
lTextBox.SetBounds(12, 36, 372, 20);
lButtonOk.SetBounds(228, 72, 75, 23);
lButtonCancel.SetBounds(309, 72, 75, 23);
lLabel.AutoSize = true;
lTextBox.Anchor = lTextBox.Anchor | AnchorStyles.Right;
lButtonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
lButtonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
lForm.ClientSize = new Size(396, 107);
lForm.Controls.AddRange(new Control[] { lLabel, lTextBox, lButtonOk, lButtonCancel });
lForm.ClientSize = new Size(Math.Max(300, lLabel.Right + 10), lForm.ClientSize.Height);
lForm.FormBorderStyle = FormBorderStyle.FixedDialog;
lForm.StartPosition = FormStartPosition.CenterScreen;
lForm.MinimizeBox = false;
lForm.MaximizeBox = false;
lForm.AcceptButton = lButtonOk;
lForm.CancelButton = lButtonCancel;
DialogResult dialogResult = lForm.ShowDialog();
aValue = lTextBox.Text;
return dialogResult;
}
Где вы должны использовать словарь? –
Идея состоит в том, чтобы иметь переопределение строковой функции, только для словаря. Я хочу, чтобы дать функции словарь, а затем он предложит пользователю раздел. Это для библиотеки, которую я создаю для использования во всех наших приложениях. Вот почему я хочу ключ и значение динамическое – blackwolfsa
Пожалуйста, проверьте мои изменения –