J'ai écrit une classe d'aide qui prend une chaîne dans le constructeur et fournit beaucoup de propriétés Get pour retourner divers aspects de la chaîne. Actuellement, le seul moyen de définir la ligne est le constructeur et une fois qu'il est défini, il ne peut pas être modifié. Puisque cette classe a seulement une variable interne (la chaîne) je me demandais si je devrais le garder de cette façon ou devrais-je permettre à la chaîne d'être réglée aussi bien?Créer une nouvelle instance ou simplement définir des variables internes
Quelques exemples de code mon aide pourquoi je demande:
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++;
}
Au-dessus est un exemple rapide de compter le nombre de réponses valides dans un fichier numérisé donné. Serait-il plus avantageux de le coder comme ça à la place?
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++;
}
Ce code est utilisé dans l'extrémité arrière d'une application Web ASP.net et doit être assez réactif. Je suis conscient que cela peut être un cas d'optimisation prématurée mais je suis en train de coder ceci pour la réactivité du côté client et la maintenabilité.
Merci!
EDIT - j'ai décidé d'inclure le constructeur de la classe ainsi:
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;
}
}
}
** EDIT 2 - ** I inclus quelques propriétés de l'échantillon (Oui, c'est ce qu'il est vraiment.) de la classe pour aider à clarifier. Comme vous pouvez le voir, la classe prend une chaîne fixe d'un scanner et facilite simplement la séparation de la ligne en morceaux plus utiles. Le fichier est un fichier délimité par une ligne à partir d'une machine Scantron et la seule façon de l'analyser est un groupe de chaînes. Appels et conversions de sous-chaînes.
Vous devez conclure ce StreamReader dans une instruction using. – RossFabricant
Haha, j'ai effectivement une fermeture explicite après que c'est fait, mais j'ai nettoyé le code pour se concentrer sur le problème. – Joshua