代码之家  ›  专栏  ›  技术社区  ›  Sam

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

c#
  •  1
  • Sam  · 技术社区  · 17 年前

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

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

    4 回复  |  直到 17 年前
        1
  •  2
  •   Paul Sonier    17 年前

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

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

        2
  •  1
  •   Henk Holterman    17 年前

    有点像

    public static class CsvWriter
    {
       private static StreamWriter _writer = new StreamWriter(...);
    
       public static  StreamWriter Writer 
       {
          get { return _writer; }
       }
    }
    

        3
  •  0
  •   David Espart    17 年前

    所有函数都属于同一类吗?您可以创建一个类变量(字段),并从类的所有方法访问它。如果没有,你总是可以创建一个带有静态字段的新公共类。

        4
  •  0
  •   Fredrik Mörk    17 年前

    我你可以用 Console.SetOut 为此:

    static void Main(string[] args)
    {
        StreamWriter writer = new StreamWriter(@"c:\path\file.ext");
        try
        {
            Console.SetOut(writer);
            Console.WriteLine("One");
            Console.WriteLine("Two");
            Console.WriteLine("Three");
        }
        catch (Exception ex)
        {
            Console.WriteLine("That went wrong.");
        }
        finally
        {
            writer.Dispose();
        }    
    }