C# 将从文件中获得的值保留在方法的返回值内
假设我需要从不同的方法访问给定文件中包含的值少量次,我可以在方法中包含某种布尔值来确定调用该文件是否合适吗 假设我有config.cfg文件。在该文件中,有三个值:C# 将从文件中获得的值保留在方法的返回值内,c#,variables,file-access,C#,Variables,File Access,假设我需要从不同的方法访问给定文件中包含的值少量次,我可以在方法中包含某种布尔值来确定调用该文件是否合适吗 假设我有config.cfg文件。在该文件中,有三个值: string/name>max| bool/adult>yes| int/age>20| 方法getUserName()返回“max”的值。它通过调用以下文件来执行此操作: using (StreamReader reader = new StreamReader(path)) { //get line
string/name>max|
bool/adult>yes|
int/age>20|
方法getUserName()
返回“max”
的值。它通过调用以下文件来执行此操作:
using (StreamReader reader = new StreamReader(path))
{
//get line beginning with string/name here
return //string value containing name
}
假设我需要多次使用name
的值,以及isAdult
和clientAge
的值。与反复访问文件相比,将请求的值保存为某种形式的静态变量要容易得多。但是,在第一次调用该方法时,该变量的值至少需要更改一次
我可以在方法getUserName()
中执行此操作吗?此外,在OOP的范围内,这个想法是否可能?它与预取类似吗?创建一个静态类。大概是这样的:
public static class ClientConfig{
public static string Name{get;set;}
public static bool IsAdult{get;set;}
public static int Age{get;set;}
public static void Load(){
// load your values
// ClientConfig.Name = name from file etc.
}
public static void Save(string newName, int age, bool value){
// save your values to the config file
}
}
并在应用程序启动时第一次调用ClientConfig.Load(),例如(或在需要检索配置数据时)在我看来,您确实需要以惰性方式访问字段(即仅在需要时,在需要时)。如果是这样,则.NET为此类情况提供了惰性类,该类还提供了现成的线程安全性:
public static Lazy<string> Name { get; } = new Lazy<string>(() => ReadNameFromFile());
publicstaticlazyname{get;}=newlazy(()=>ReadNameFromFile());
Lazy还将确保只创建一次值(即调用initiailization方法),在以后的调用中,它将简单地返回已检索到的值。您可能希望创建一个单例类来解析文件并将这些值作为属性。第一次访问类时,它将加载文件,然后在将来访问时将在内存中。为什么不是静态的,并将其设置为初始值null。简单、干净,不管纯粹主义者怎么说,这是对静态变量的正确使用(实际上是c语言定义专门设计的目的)。@Rob因为这需要在类中添加一个对象。我试图在需要时在单个方法内完成所有工作,而不是为
Name
创建单独的值。这意味着,如果我执行的函数不需要文件中包含的某些数据,我就不必访问它。仅供参考,我的目标是嵌入式平台,因此有必要进行精简。您能详细介绍一下这是如何工作的吗?get/set功能在这里是如何应用的?这是基本的OOP。Name、IsAdult和Age是类属性(在本例中,它们是静态的)。请阅读更多关于和什么是