2013-09-25 82 views
0

这里是我的代码如何编写使用扩展方法

class Program 
{ 
    static void Main(string[] args) 
    { 
     (from d in new DirectoryInfo("E:\\") 
    .GetDirectories() select d.Name) 
      .WriteToConsole(Logger.WriteToLog , true); 
      // .WriteToConsole(Console.WriteLine); 
    } 
} 

public static class Logger 
{ 
    public static void WriteToLog(dynamic data) 
    { 
     string filePath = string.Format("{0}\\log.txt", Environment.CurrentDirectory); 
     var stream = File.Create(filePath); 
     stream.Write(Encoding.UTF8.GetBytes(data), 0, Encoding.UTF8.GetByteCount(data)); 
     stream.Flush(); 
     stream.Close(); 
    } 
} 

public static class WriteExtensions 
{ 
    public static void WriteToConsole<T1>(this IEnumerable<T1> data , Action<T1> action, bool carelist = false) 
    { 
     if (carelist) 
     { 
      // all i want is to invoke action by sending data rather than 
    // one by one 
      return; 
     } 
     foreach (var item in data) 
     { 
      action.Invoke(item); 
     } 
    } 
} 

的问题是,我们可以通过line..but写控制台线写入文件我想一次把所有的日志文件或控制台消息..任何帮助..谢谢

+0

你有一个函数'WriteToConsole'不写入控制台。这有点令人困惑。另外,是否有理由使用动作和扩展方法?为什么不用一些正常的方式来做呢? – Dialecticus

+0

八号线评论...取消注释会写信来安慰.. –

+0

你的愿望是取代一行代码。我的问题是为什么?为什么只需要替换一行代码?为什么不更换几行? – Dialecticus

回答

0

你的日志需求正在揭示复杂。因此,我建议已有logging frameworks。他们有你需要的功能,但可能还没有意识到你需要它们。登录到控制台和日志文件的支持,并且可以在配置文件中直接被启用,而不是在代码中。同时还要记录到多个目标。还根据日志的严重程度进行筛选。当日期发生变化或文件增长超过限制时,也会转移到另一个文件。

+0

感谢引入框架.. –