c# - 控制台应用程序中的可选输出文件 - 使 StreamWriter 全局化

标签 c#

我正在编写一个控制台应用程序,它在 SQL Server 中查找有关 SSIS 包的信息。我让它工作并写入 .csv 文件。我刚刚添加了为服务器名、文件夹名和输出文件传递命令行开关的能力。如果未指定输出文件,我只想输出到控制台,我已经在这样做了。

我处理文件写入的方式似乎很笨拙,而且可能是错误的。

在我的主要方法中,我创建了一个 StreamWriter。我需要将程序的整个输出写入此文件。我通过递归调用函数来浏览指定文件夹下的文件夹。

我在所有调用中传递 StreamWriter 对象 - 它是不使用它的函数中的一个参数,因此它可以传递给使用它的函数。看起来我应该能够使它成为一个全局变量,但我看到 c# 没有全局变量并且“如果你使用的是全局变量,你可能做错了”。

我原本计划在使用这个小实用程序一段时间后最终重新审视这个问题,但我现在遇到了一个问题,即所有函数都需要 StreamWriter 对象 - 如果我将其设为可选,那么它就不会在那里参加事件。而且 c# 似乎也没有可选参数。

我相信您能看出我不是 C# 专家,只是在需要时才涉足。感谢您的帮助。

最佳答案

您想使用 singleton模式来引用您正在使用的 StreamWriter。单例是一种“模拟”全局变量功能的方法,而不会出现它们的问题。

本质上,单例提供的是您希望在应用程序的许多不同部分之间共享的资源的类特定实例。通过静态类实例访问资源。

实际上,您要做的是定义一个类,该类的公共(public) static 成员是您要使用的 StreamWriter;这样,您在其余代码中使用的任何方法都可以通过从包含类访问它来访问 StreamWriter 的 SAME 实例(无需创建该类的实例,因为它是静态的)。

关于c# - 控制台应用程序中的可选输出文件 - 使 StreamWriter 全局化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1139316/

相关文章:

c# - 格式异常毫米:ss

c# - Nuget包安装未添加对项目的引用

c# - 我应该在 SQL 中还是在 LINQ 中执行 Where 子句?

c# - 为所有对象创建一个委托(delegate),而不是为每个对象创建一个委托(delegate)

c# - Cake (C# make) 在 build.cake 中使用 .Net Framework 方法

c# - 如何重新排列出现在任务栏中的应用程序的缩略图?

c# - 如何将一个 WinForms 用户控件放在三个窗体上并同时更新所有三个窗体?

c# - _NAME、__NAME、_NAME_、__NAME__ 等符号的含义

c# - 数字格式在 ASP.NET Core 中不起作用

C# - 禁用日期 JSON 的自动 UTC 偏移