Сначала вам нужно определить формат, который будет следовать за вашим типом при преобразовании в строку. Простым примером является номер социального страхования. Вы можете легко описать это как регулярное выражение.
\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<Token> 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;
}
}
Не могли бы вы привести пример того, что вы пытаетесь сделать? –
Можете ли вы дать несколько примеров фрагментов кода? –
Это возможно быть более расплывчатым, вы знаете. – Marc