【问题标题】:C# "Load" an object's property with text from a file during compilationC# 在编译期间使用文件中的文本“加载”对象的属性
【发布时间】:2017-07-07 02:52:10
【问题描述】:

我想在编译期间将文件中的文本加载到类的属性中

例子-

我有一个名为 banana.txt 的文件,我想在编译期间将其内容放入 Banana 类中。

public class Banana
{
     public string Text { get; set; }  //contents of banana.txt goes in here
}

如何做到这一点?

这样做的目的是,每次需要 Banana 对象的 Text 时,不必读取文件,文件中的文本只需在编译期间读取一次。

(注意:我必须从文件中读取,而不是将内容复制到变量或资源文件中。我意识到每个Banana 对象都会有相同的文字。)

【问题讨论】:

  • 在应用程序启动时(运行时)只加载一次文件可以吗?
  • Ashin,这将是一个比每次调用对象时都加载它更好的解决方案。
  • 请检查我发布的答案。

标签: c# compilation


【解决方案1】:

实现这一目标的一种方法是: 编写预构建事件。 在预构建事件中,调用程序。 这个程序可以是另一个 C# 程序 该程序将从banana.txt 中读取。 然后这个程序会重新生成你的源代码。

例如。如果您的代码为:

public string Text = "~placeholder_for_Text~"

程序会将“~placeholder_for_Text~”替换为banana.txt的实际内容

【讨论】:

    【解决方案2】:

    如果在运行时只加载一次文件内容就可以了,你可以考虑使用下面的代码:

    public class Banana
    {
        public string Text
        {
            get
            {
                return fileContent;
            }
        }
    
        private static string fileContent;
    
        static Banana()
        {
            using (var reader = File.OpenText("banana.txt"))
            {
                fileContent = reader.ReadToEnd();
            }
        }
    }
    

    【讨论】:

    • 感谢 ashin 的建议,我最终可能会使用这样的东西,但我仍然想知道在编译期间是否有一种简单的方法可以在代码中执行此操作。
    猜你喜欢
    • 2014-08-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多