Intereting Posts
Расчет будущей эпохи Время в C # По крайней мере, один объект должен реализовать IComparable classический потребительский шаблон производителя с использованием blockingcollection и задач .net 4 TPL C #: изменение значений для каждого элемента массива Используя Linq и XDocument, могу ли я получить все дочерние элементы под родительским тегом? Настройка источника изображения программно в приложении Metro, изображение не появляется Мониторинг при запуске exe Корейский не признается в ComboBox Сборщик мусора слишком медленный при работе с большими изображениями WPF Animation Warning: 6: Невозможно выполнить действие Получите восточное время в c # без преобразования местного времени Разница в использовании int и uint и когда использовать Как убить процесс, не получив исключения «процесс вышел»? Как получить свойство UserUnit из PdfFile с помощью iTextSharp PdfReader Ошибка. Элементы управления расширителем могут не регистрироваться перед PreRender

Как преобразовать тип строки в пользовательский пользовательский тип

У меня есть строковое значение, которое необходимо преобразовать в мой пользовательский настраиваемый тип. как это сделать, пожалуйста, помогите мне.

public class ItemMaster { public static ItemMaster loadFromReader(string oReader) { return oReader;//here i am unable to convert into ItemMaster type } } 

В зависимости от вашего типа есть два способа, которыми вы могли бы это сделать.

Первая добавляет конструктор к вашему типу, который принимает параметр String .

 public YourCustomType(string data) { // use data to populate the fields of your object } 

Второй – это добавление статического метода Parse .

 public static YourCustomType Parse(string input) { // parse the string into the parameters you need return new YourCustomType(some, parameters); } 

Создайте метод Parse для вашего пользовательского пользовательского типа:

 public class MyCustomType { public int A { get; private set; } public int B { get; private set; } public static MyCustomType Parse(string s) { // Manipulate s and construct a new instance of MyCustomType var vals = s.Split(new char[] { '|' }) .Select(i => int.Parse(i)) .ToArray(); if(vals.Length != 2) throw new FormatException("Invalid format."); return new MyCustomType { A = vals[0], B = vals[1] }; } } 

Конечно, приведенный пример чрезвычайно прост, но, по крайней мере, вы начнете.

Convert.ChangeType() может помочь вам.

 string sAge = "23"; int iAge = (int)Convert.ChangeType(sAge, typeof(int)); string sDate = "01.01.2010"; DateTime dDate = (DateTime)Convert.ChangeType(sDate, typeof(DateTime)); 

Сначала вам нужно определить формат, который будет использоваться вашим типом при преобразовании в строку. Простым примером является номер социального страхования. Вы можете легко описать это как регулярное выражение.

 \d{3}-\d{2}-\d{4} 

После этого вам просто нужно обратить вспять процесс. Соглашение заключается в определении метода Parse метода TryParse для вашего типа. Разница заключается в том, что TryParse не будет генерировать исключение.

 public static SSN Parse(string input) public static bool TryParse(string input, out SSN result) 

Теперь процесс, который вы выполняете для фактического анализа входной строки, может быть как сложным, так и простым. Обычно вы должны токенизировать входную строку и выполнять синтаксическую проверку. (EX: Может ли тире перейти сюда?)

 number dash number dash number 

Это действительно зависит от того, сколько работы вы хотите вложить в нее. Вот базовый пример того, как вы можете символизировать строку.

 private static IEnumerable Tokenize(string input) { var startIndex = 0; var endIndex = 0; while (endIndex < input.Length) { if (char.IsDigit(input[endIndex])) { while (char.IsDigit(input[++endIndex])); var value = input.SubString(startIndex, endIndex - startIndex); yield return new Token(value, TokenType.Number); } else if (input[endIndex] == '-') { yield return new Token("-", TokenType.Dash); } else { yield return new Token(input[endIndex].ToString(), TokenType.Error); } startIndex = ++endIndex; } } 

Для фактического преобразования нам нужно будет увидеть структуру classа. Скелет для этого выглядел бы следующим образом:

 class MyType { // Implementation ... public MyType ConvertFromString(string value) { // Convert this from the string into your type } }