输出到文件c#

Output to file c#

我正在使用 Apriori 算法来获得强大的规则。到目前为止,我已经把它们放在一个列表框中(程序是在网上找到的)。但是现在我想将输出保存到 txt 文件中。到目前为止,我在 .txt 文件中得到的只有 "AprioriAlgorithm.Rule"。它正在获取正确数量的规则,因此重复“AprioriAlgorithm.Rule 规则数量。例如,如果我有 12 个强规则,我在 txt 文件中得到 12 次 AprioriAlgoritm.Rule。

namespace WPFClient
{
[Export(typeof(IResult))]
public partial class Result : Window, IResult
{
    public Result()
    {
        InitializeComponent();
    }

    public void Show(Output output)
    {
        FileStream fs = new FileStream("strongrules.txt", FileMode.Create);
        StreamWriter sw = new StreamWriter(fs);
        this.DataContext = output;
        for (int x = 0; x < output.StrongRules.Count; x++)
        {
            sw.WriteLine(output.StrongRules[x]);
        }

        this.ShowDialog();
        sw.Close();

    }
  }
}

这是输出 class。

namespace AprioriAlgorithm
{
using System.Collections.Generic;

public class Output
{
    #region Public Properties

    public IList<Rule> StrongRules { get; set; }

    public IList<string> MaximalItemSets { get; set; }

    public Dictionary<string, Dictionary<string, double>> ClosedItemSets { get; set; }

    public ItemsDictionary FrequentItems { get; set; } 

    #endregion
}
}

由于您将 Rule 而不是 string 类型的对象传递给 WriteLine 方法,因此您必须指定要输出的确切内容。

您需要覆盖 Rule class 的 ToString() 方法才能做到这一点。

public class Rule
{
    public string RuleName { get; set; }
    public string RuleDescription { get; set; }

    public override string ToString()
    {
        return string.Format("{0}: {1}", RuleName, RuleDescription);
    }
}

documentation所说

Writes the text representation of an object by calling the ToString method on that object, followed by a line terminator to the text string or stream.

另一种方法(除了重写 ToString)是输出单独的属性:

var rule = output.StringRules[x];
sw.WriteLine("{0}: {1}", rule.RuleName, rule.RuleDescription);

或者,使用 C# 的 string interpolation 功能:

sw.WriteLine($"{rule.RuleName}: {rule.RuleDescription}");

如果你不能或不想覆盖 ToString,你会想使用它。