这是一个用于将数据保存到一个困扰我的文件的方法:
public void SaveData(string filename, Action<StreamWriter> saveAction)
Run Code Online (Sandbox Code Playgroud)
该库的文档将第二个参数描述为"处理实际写入数据的委托操作".但是,我对如何为StreamWriter实际创建一个动作感到迷茫.我做了一些研究,发现很多这样的东西用作例子Action<T>:
Action<string> s = Console.WriteLine;
Run Code Online (Sandbox Code Playgroud)
从那里我推断这<T>是传递的参数类型,并且Action是采用此参数的方法.我知道这可能是非常错误的.
基本上我想做的就是使用StreamWriter.WriteLine(string line).但是,我不能用
Action<StreamWriter> s = StreamWriter.WriteLine;
Run Code Online (Sandbox Code Playgroud)
因为这没有任何意义,而且StreamWriter.WriteLine无论如何我都无法参考.现在我认为必须有一个方法,StreamWriter从一个我不知道的类.如果有人愿意指出我正确的方向,我将非常感激.
你可能会问为什么我不能创造自己的StreamWriter,并按照我一直这样做的方式去做.好吧,我正在ZNA上使用XNA,因此写入文本文件实际上很难获得所有级别的保护(所有应用程序都是沙箱),而我现在使用的库现在承诺更多如果我能弄清楚如何Action<T>有效地使用,那就简化了.此外,我希望学习并更好地配备将来使用代表.
可能API的用途如下:
SaveData(filename, writer => writer.WriteLine(saveData));
Run Code Online (Sandbox Code Playgroud)
=>表示法简明地声明了一个匿名函数.你可以用更长的方式写它:
private static void SaveToWriter(StreamWriter writer)
{
// get saveData somehow
writer.WriteLine(saveData);
}
// ...
SaveData(filename, SaveToWriter);
Run Code Online (Sandbox Code Playgroud)
这可能有助于阐明所涉及的类型签名.