У меня есть класс, в котором я хочу использовать строки с фиксированным размером. Причина фиксированного размера заключается в том, что класс «сериализуется» в текстовый файл со значениями с фиксированной длиной. Я хочу избежать, чтобы написать foreach значение предложения guard и вместо этого обработать класс this.Строка Объект с фиксированной длиной C#
Так что у меня круглые около 30 свойств, которые будут выглядеть следующим образом
public String CompanyNumber
{
get
{
return m_CompanyNumber.PadLeft(5, ' ');
}
set
{
if (value.Length > 5)
{
throw new StringToLongException("The CompanyNumber may only have 5 characters", "CompanyNumber");
}
m_CompanyNumber = value;
}
}
Я хотел бы иметь строку, которая обрабатывает это само по себе. В настоящее время у меня есть следующий:
public class FixedString
{
String m_FixedString;
public FixedString(String value)
{
if (value.Length > 5)
{
throw new StringToLongException("The FixedString value may consist of 5 characters", "value");
}
m_FixedString= value;
}
public static implicit operator FixedString(String value)
{
FixedString fsv = new FixedString(value);
return fsv;
}
public override string ToString()
{
return m_FixedString.PadLeft(5,' ');
}
}
У меня есть проблема с этим решением является то, что я не могу установить длину строки в «время компиляции».
Было бы идеально, если это будет выглядеть примерно так, в конце концов
public FixedString<5> CompanyNumber { get; set; }
Не ходите туда. Просто бросьте исключения и назовите это днем. – CodesInChaos
Я понимаю проблему, но я не думаю, что то, что вы пытаетесь сделать, является хорошим решением. Вместо этого я попробовал [code weaver] (https://en.wikipedia.org/wiki/Aspect_weaver), чтобы помочь с повторяющейся проблемой кода, которую вы имеете. Например [Fody] (https://github.com/Fody/Fody) является хорошим бесплатным открытым исходным кодом для .net. Вам, конечно, придется написать плагин для него, чтобы он делал то, что вы хотите. –
btw, не должно быть 'StringTooLongException', а не' StringToLongException'? 'StringToLong' звучит как конверсия. – Bob