c# - 需要澄清有关 Action<T>

标签 c# delegates xna

下面是一种用于将数据保存到文件的方法,这让我很困惑:

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

该库的文档将第二个参数描述为“处理实际写入数据的委托(delegate)操作”。然而,我不知道如何为 StreamWriter 实际创建一个 Action 。我做了一些研究,发现很多像这样的东西用作 Action<T> 的例子。 :

Action<string> s = Console.WriteLine;

据此我推断 <T>是传递的参数类型和 Action是采用此参数的方法。我知道这可能是非常错误的。

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

Action<StreamWriter> s = StreamWriter.WriteLine;

因为那没有意义,而且我不可能引用 StreamWriter.WriteLine反正。现在我在想一定有一种方法需要 StreamWriter来 self 不知道的类(class)。如果有人愿意为我指出正确的方向,我将不胜感激。

您可能会问为什么我不能创建自己的 StreamWriter并按照我一直做的方式去做。好吧,我在 Zune 上的 XNA 中工作,所以在所有级别的保护下写入文本文件实际上是相当困难的(所有应用程序都是沙盒),而我现在使用的库 promise 会让它变得更多精简如果我能弄清楚如何使用Action<T>有效地。另外,我想学习并更好地准备在未来使用委托(delegate)。

最佳答案

可能该 API 旨在像这样使用:

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

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

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

// ...

SaveData(filename, SaveToWriter);

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

关于c# - 需要澄清有关 Action<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5606801/

相关文章:

c# - XNA GameTime Windows 手机

c# - 无法信任 ASP.NET Core 中的本地 HTTPs 证书

c# - 从堆栈面板的中心开始的元素

c# - 当进行非常大的插入时,不参数化 MySQL 查询而是使用方法 MySqlHelper.EscapeString(string) 是否安全?

c# - 关于委托(delegate)的问题

iphone - MFMailComposeViewController 的委托(delegate)不处理取消按钮

c# - 在 XNA 应用程序中移动单个 Sprite 时卡顿

c# - 在 C# 的属性中使用变量

c# - 通过输入参数减少表达式

c# - 无法使用 ContentTypeReader 加载模型