Func中不是所有代码路径返回值<>通用类型委托

时间:2013-07-11 11:27:12

标签: c# generics

我是新的通用类型代理并尝试实现 Func<>泛型类型代理

我正在开发winform应用程序,其中我尝试保存文件,我的保存功能返回我bool(True / False)。我知道在没有泛型委托的情况下实现非常简单,但我想在Generic Delegate中实现我的代码

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&lt;&gt;的最后一个参数是什么它成为Func&lt;&gt;的返回类型即它由Func&lt;&gt;返回。

所以我如何处理错误 "Not All Code Path Return Value"

4 个答案:

答案 0 :(得分:4)

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

接下来,如果您的委托接受参数,则无需捕获当前函数调用的参数。所以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);
    }
}

答案 1 :(得分: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);
    }
}

答案 2 :(得分:0)

您应该使用您的参数执行您的func2并返回其结果。 你还需要修理你的代表。

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

如果你不修复委托,你会创建func2,它需要两个args并忽略它们。

答案 3 :(得分: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);
            }
        }