存储在变量而不是写入控制台?

时间:2011-06-22 06:05:41

标签: c# .net console-application

请参阅GitHub

static void Main(string[] args)
{
    // do something...

    service.Feedback += new FeedbackService.OnFeedback(service_Feedback);
}

static void service_Feedback(object sender, Feedback feedback)
{
    Console.WriteLine(string.Format("Feedback - Timestamp: {0} - DeviceId: {1}", feedback.Timestamp, feedback.DeviceToken));
}

如何在控制台中显示输出而不是如何将其存储到变量中,以便它可以在主程序中?

3 个答案:

答案 0 :(得分:2)

嗯,你需要声明变量:

static Feedback lastFeedback;

然后只需在方法中指定它:

static void service_Feedback(object sender, Feedback feedback)
{
    lastFeedback = feedback;
}

您可能需要考虑将其设为List<Feedback>,而不是仅存储收到的最后反馈。

请注意,如果涉及多个线程,则需要格外小心 - 特别是如果您正在使用集合。 (List<T>不是线程安全的。)

当然,你没有 使用事件处理程序的方法:

service.Feedback += (sender, feedback) => lastFeedback = feedback;

这取决于你对lambda表达的舒适程度。即使你不想这样内联,你仍然可以使用方法组转换使现有的处理程序订阅更简单:

service.Feedback += service_Feedback;

答案 1 :(得分:1)

使用lambda:

class Program
{
    static string feedback; // string to store formatted string, use type Feedback to store the variable itself

    static void Main(string[] args)
    {
        service.Feedback += (s,f) => feedback = String.Format("Feedback - Timestamp: {0} - DeviceId: {1}", f.Timestamp, f.DeviceToken);
    }
}

或经典:

static void service_Feedback(object sender, Feedback f)
{
   feedback = string.Format("Feedback - Timestamp: {0} - DeviceId: {1}", f.Timestamp, f.DeviceToken);
}

这将只存储最后的反馈。

答案 2 :(得分:0)

static void Main(string[] args)
{
    // do something...

    service.Feedback += new FeedbackService.OnFeedback(service_Feedback);
}

static StringBuilder sb = new StringBuilder();
static void service_Feedback(object sender, Feedback feedback)
{
    sb.AppendLine(string.Format("Feedback - Timestamp: {0} - DeviceId: {1}", feedback.Timestamp, feedback.DeviceToken));
}