Я написал вспомогательный класс, который принимает строку в конструкторе и предоставляет множество свойств Get для возврата различных аспектов строки. В настоящее время единственный способ установить строку - через конструктор, и после ее установки ее нельзя изменить. Так как у этого класса есть только одна внутренняя переменная (строка), мне было интересно, следует ли мне сохранить ее таким образом, или я должен также разрешить установку строки?
Некоторые примеры кода моей помощи, почему я спрашиваю:
StreamReader stream = new StreamReader("ScannedFile.dat");
ScannerLine line = null;
int responses = 0;
while (!stream.EndOfStream)
{
line = new ScannerLine(stream.ReadLine());
if (line.IsValid && !line.IsKey && line.HasResponses)
responses++;
}
Выше приведен быстрый пример подсчета количества действительных ответов в данном отсканированном файле. Будет ли выгоднее вместо этого кодировать это?
StreamReader stream = new StreamReader("ScannedFile.dat");
ScannerLine line = new ScannerLine();
int responses = 0;
while (!stream.EndOfStream)
{
line.RawLine = stream.ReadLine();
if (line.IsValid && !line.IsKey && line.HasResponses)
responses++;
}
Этот код используется в серверной части веб-приложения ASP.net и должен быть адаптивным. Я знаю, что это может быть причиной преждевременной оптимизации, но я пишу это для отзывчивости на стороне клиента и удобства обслуживания.
Спасибо!
РЕДАКТИРОВАТЬ - Я решил также включить конструктор класса (Да, это действительно так.):
public class ScannerLine
{
private string line;
public ScannerLine(string line)
{
this.line = line;
}
/// <summary>Gets the date the exam was scanned.</summary>
public DateTime ScanDate
{
get
{
DateTime test = DateTime.MinValue;
DateTime.TryParseExact(line.Substring(12, 6).Trim(), "MMddyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out test);
return test;
}
}
/// <summary>Gets a value indicating whether to use raw scoring.</summary>
public bool UseRaw { get { return (line.Substring(112, 1) == "R" ? true : false); } }
/// <summary>Gets the raw points per question.</summary>
public float RawPoints
{
get
{
float test = float.MinValue;
float.TryParse(line.Substring(113, 4).Insert(2, "."), out test);
return test;
}
}
}
** РЕДАКТИРОВАТЬ 2 - ** Я включил некоторые примеры свойств класса, чтобы помочь прояснить. Как вы можете видеть, класс берет фиксированную строку из сканера и просто упрощает разбиение строки на более полезные куски. Файл представляет собой файл с разделителями строк с компьютера Scantron, и единственный способ его анализа - это набор строк. Вызовы и преобразования в подстроки.