Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将从文件中获得的值保留在方法的返回值内_C#_Variables_File Access - Fatal编程技术网

C# 将从文件中获得的值保留在方法的返回值内

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

假设我需要从不同的方法访问给定文件中包含的值少量次,我可以在方法中包含某种布尔值来确定调用该文件是否合适吗

假设我有config.cfg文件。在该文件中,有三个值:

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是类属性(在本例中,它们是静态的)。请阅读更多关于和什么是