这是一个用于将数据保存到困扰我的文件的方法:
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>
,那就简化了。此外,我希望学习并更好地配备将来使用代表。
答案 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);
可能有助于解释所涉及的类型签名。