0

我是新的泛型类型委托并尝试实现Func<> 泛型类型委托

我正在开发 winform 应用程序,我在其中尝试保存文件,我的保存函数返回布尔值(真/假)。我知道在没有通用委托的情况下实现它非常简单,但我想在我的代码中实现通用委托

public bool Save( string fileName, SaveFlags options)
{
    if (fileName == null) throw new ArgumentNullException("file");
    using (FileStream fs = File.Create(fileName))
    {
        Func<string, SaveFlags, bool> func2 = (fileStream, opt) => Save(fs , options);
       **// what should I need to return**  
    }
}

private bool Save(Stream iStream, SaveFlags options)
{
   **//Some operation perform and return TRUE or FALSE**

}

我知道无论 Func<> 的最后一个输出参数成为 Func<> 的返回类型,即它由 Func<> 返回。

那么我该如何处理错误"Not All Code Path Return Value"

4

4 回答 4

4

首先,您正在查看无限递归。从您的 lambda 参数名称中,您打算附加到接受 a 的重载Stream。但这Func<string, SaveFlags, bool>意味着您将接受 astring而不是重载。

接下来,如果您的委托带参数,则不需要捕获当前函数调用的参数。所以 lambda 根本没有帮助。

考虑到这一点:

public bool Save( string fileName, SaveFlags options)
{
    if (fileName == null) throw new ArgumentNullException("file");
    Func<Stream, SaveFlags, bool> func2 = Save;
    using (FileStream fs = File.Create(fileName))
    {
        return func2(fs, options);
    }
}
于 2013-07-11T11:36:04.563 回答
1

调用你的函数。

public bool Save( string fileName, SaveFlags options)
{
    if (fileName == null) throw new ArgumentNullException("file");
    using (FileStream fs = File.Create(fileName))
    {
        Func<string, SaveFlags, bool> func2 = (fileStream, opt) => Save(fs , options);
        return func2(fileName, options);
    }
}
于 2013-07-11T11:29:23.217 回答
0

检查此解决方案

 public bool Save(string fileName, SaveFlags options)
        {
            if (fileName == null) throw new ArgumentNullException("file");
            using (FileStream fs = File.Create(fileName))
            {
                Func<string, SaveFlags, bool> func2 = (fileStream, opt) => Save(fs, options);
                return func2(fileName, options);
            }
        }
于 2013-07-11T12:20:08.060 回答
0

您应该使用参数执行 func2 并返回其结果。您还需要修复您的委托。

Func<Stream, SaveFlags, bool> func2 = (fileStream, opt) => Save(fileStream, opt);
return func2(filename, options);

如果您不修复委托,您将创建 func2 接受两个参数并忽略它们。

于 2013-07-11T11:30:05.313 回答