需要澄清行动<t> </t>

时间:2011-04-09 17:58:58

标签: c# delegates xna

这是一个用于将数据保存到困扰我的文件的方法:

public void SaveData(string filename, Action<StreamWriter> saveAction)

库的文档将第二个参数描述为“处理实际写入数据的委托操作”。但是,我对如何为StreamWriter实际创建一个动作感到迷茫。我做了一些研究,发现很多像这样的东西用作Action<T>的例子:

Action<string> s = Console.WriteLine;

由此我推断<T>是传递的参数类型,Action是获取此参数的方法。我知道这可能是非常错误的。

基本上我想做的就是使用StreamWriter.WriteLine(string line)。但是,我不能使用

Action<StreamWriter> s = StreamWriter.WriteLine;

因为这没有意义,而且我无论如何都不可能引用StreamWriter.WriteLine。现在我认为必须有一个方法从一个我不知道的类中取StreamWriter。如果有人愿意指出我正确的方向,我将非常感激。

你可能会问我为什么不能创建自己的StreamWriter并按照我一直这样做的方式来做。好吧,我正在ZNA上使用XNA,因此写入文本文件实际上很难获得所有级别的保护(所有应用程序都是沙箱),而我现在使用的库现在承诺更多如果我能够有效地弄清楚如何使用Action<T>,那就简化了。此外,我希望学习并更好地配备将来使用代表。

1 个答案:

答案 0 :(得分:6)

可能API的使用方式如下:

SaveData(filename, writer => writer.WriteLine(saveData));

=&gt;符号简洁地声明了一个匿名函数。你可以用更长的方式写它:

private static void SaveToWriter(StreamWriter writer)
{
    // get saveData somehow
    writer.WriteLine(saveData);
}

// ...

SaveData(filename, SaveToWriter);

可能有助于解释所涉及的类型签名。