gpt4 book ai didi

c# - 创建新实例或仅设置内部变量

转载 作者:太空宇宙 更新时间:2023-11-03 22:27:35 24 4
gpt4 key购买 nike

我编写了一个辅助类,它在构造函数中接受一个字符串,并提供大量 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 Web 应用程序的后端,需要一定程度的响应。我知道这可能是一个过早优化的案例,但我正在对此进行编码以提高客户端的响应能力和可维护性。

谢谢!

编辑 - 我决定也包括该类的构造函数(是的,这就是它的真实含义。):

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 - ** 我包含了一些类的示例属性以帮助澄清。如您所见,该类从扫描器中获取固定字符串,并使将字符串分解为更有用的 block 变得更加容易。该文件是来自 Scantron 机器的行分隔文件,解析它的唯一方法是一堆 string.Substring 调用和转换。

最佳答案

如果你真的需要这个类,我肯定会坚持使用不可变版本。不变性让您更容易推理您的代码 - 如果您存储对 ScannerLine 的引用,知道它不会改变是很有用的。性能几乎肯定是微不足道的——读取行所涉及的 IO 可能比创建新对象更重要。如果您真的关心性能,在您决定根据这些性能问题做出设计决策之前,应该对代码进行基准测试/概要分析。

但是,如果您的状态只是一个字符串,那么与直接存储字符串并在以后使用适当的方法分析它们相比,您真的能提供很多好处吗? ScannerLine 是分析字符串并缓存分析结果,还是只是一堆解析方法?

关于c# - 创建新实例或仅设置内部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/744504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com