Введите различные типы данных в текстовое поле и введите их в массив объектов.

Введите различные типы данных в текстовое поле и введите их в массив объектов.

Я хочу, чтобы пользователь мог вводить различные типы данных в TextBox, например:

“a”, 1, 1.5, “b”

А затем разделить их на «,» и поместить их в массив или список объектов. Что-то похожее на это, за исключением объектов, поэтому я могу распознать их как строку, int и т. д.

String sample = textbox; 
String samples = sample.Split(new Char[] {','});
            foreach (var x in samples)

Благодарю вас


person TheIdiot    schedule 21.02.2015    source источник
comment
Есть три операции: создание текстового поля WPF, использование данных и обработка данных. С каким из трех у вас возникли проблемы? Я рекомендую вам ограничить вопрос одним из трех; для меня это звучит так, как будто вам просто нужна помощь в разборе данных, а текстовое поле WPF является вспомогательным и не требуется для определения проблемы.   -  person ΩmegaMan    schedule 22.02.2015


Ответы (1)


Это двухэтапный процесс. Шаг 1 — проанализировать строку CSV от пользователя, а шаг 2 — определить число (я выбираю двойное) в стихах прямого текста. Я предпочитаю регулярные выражения из-за их гибкости (после изучения) и считаю, что оба шага можно решить с помощью регулярных выражений.

Если сделать поиск, там целые вопросы StackOverflow на тему определения номеров. Ваше требование кажется базовым, и с учетом этого я предоставлю базовую проверку текста с числовыми стихами с использованием регулярного выражения. (Обратите внимание, что его можно расширить, чтобы еще больше ограничить возможности):

List<object> items = new List<object>();
string data = "a, 1, 1.5, b";

Regex.Matches(data, "[^,]+") // Get each object without a comma over the line.
     .OfType<Match>()
     .Select (mt => mt.ToString().Trim()) // Remove any whitespace (if any)
     .ToList()
     .ForEach(itm => items.Add(Regex.IsMatch(itm, "[a-zA-Z]")  ?          // Is it
                                            (object) itm :                // a string
                                            (object) Double.Parse(itm))); // a number

Console.WriteLine ( string.Join( " | ", items.Select (obj => obj.ToString())));
// Writes:
// a | 1 | 1.5 |  b

Console.WriteLine ( string.Join( ", ", items.Select (obj => obj.GetType())));
// Writes:
// System.String, System.Double, System.Double, System.String
person ΩmegaMan    schedule 21.02.2015