C# Func中并非所有代码路径返回值<&燃气轮机;泛型类型委托

C# Func中并非所有代码路径返回值<&燃气轮机;泛型类型委托,c#,generics,C#,Generics,我是新的泛型类型委托,尝试实现Func泛型类型委托 我正在开发winform应用程序,在该应用程序中,我试图保存我的保存函数返回的文件bool(True/False)。我知道在没有泛型委托的情况下实现非常简单,但我想在我的代码中实现泛型委托 public bool Save( string fileName, SaveFlags options) { if (fileName == null) throw new ArgumentNullException("file"); us

我是新的泛型类型委托,尝试实现Func泛型类型委托

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

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**

}
public bool保存(字符串文件名、保存标志选项)
{
如果(fileName==null)抛出新的ArgumentNullException(“文件”);
使用(FileStream fs=File.Create(文件名))
{
Func func2=(fileStream,opt)=>Save(fs,options);
**//我需要归还什么**
}
}
私有布尔保存(流iStream、保存标志选项)
{
**//某些操作执行并返回TRUE或FALSE**
}
我知道Func的最后一个out参数变成了Func的返回类型,即它按Func返回

因此,如何处理错误“并非所有代码路径返回值”

调用函数

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);
    }
}
public bool保存(字符串文件名、保存标志选项)
{
如果(fileName==null)抛出新的ArgumentNullException(“文件”);
使用(FileStream fs=File.Create(文件名))
{
Func func2=(fileStream,opt)=>Save(fs,options);
返回func2(文件名、选项);
}
}
调用函数

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);
    }
}
public bool保存(字符串文件名、保存标志选项)
{
如果(fileName==null)抛出新的ArgumentNullException(“文件”);
使用(FileStream fs=File.Create(文件名))
{
Func func2=(fileStream,opt)=>Save(fs,options);
返回func2(文件名、选项);
}
}

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

Func<Stream, SaveFlags, bool> func2 = (fileStream, opt) => Save(fileStream, opt);
return func2(filename, options);
Func func2=(文件流,opt)=>Save(文件流,opt);
返回func2(文件名、选项);

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

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

Func<Stream, SaveFlags, bool> func2 = (fileStream, opt) => Save(fileStream, opt);
return func2(filename, options);
Func func2=(文件流,opt)=>Save(文件流,opt);
返回func2(文件名、选项);

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

首先,您将看到无限递归。根据lambda参数名称,您打算附加到接受
流的重载。但是
Func
意味着您将获得接受
字符串的重载

接下来,如果委托获取参数,则不需要捕获当前函数调用的参数。所以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);
    }
}
public bool保存(字符串文件名、保存标志选项)
{
如果(fileName==null)抛出新的ArgumentNullException(“文件”);
Func func2=保存;
使用(FileStream fs=File.Create(文件名))
{
返回函数2(fs、选项);
}
}

首先,您看到的是无限递归。根据lambda参数名称,您打算附加到接受
流的重载。但是
Func
意味着您将获得接受
字符串的重载

接下来,如果委托获取参数,则不需要捕获当前函数调用的参数。所以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);
    }
}
public bool保存(字符串文件名、保存标志选项)
{
如果(fileName==null)抛出新的ArgumentNullException(“文件”);
Func func2=保存;
使用(FileStream fs=File.Create(文件名))
{
返回函数2(fs、选项);
}
}
检查此解决方案

 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);
            }
        }
public bool保存(字符串文件名、保存标志选项)
{
如果(fileName==null)抛出新的ArgumentNullException(“文件”);
使用(FileStream fs=File.Create(文件名))
{
Func func2=(fileStream,opt)=>Save(fs,options);
返回func2(文件名、选项);
}
}
检查此解决方案

 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);
            }
        }
public bool保存(字符串文件名、保存标志选项)
{
如果(fileName==null)抛出新的ArgumentNullException(“文件”);
使用(FileStream fs=File.Create(文件名))
{
Func func2=(fileStream,opt)=>Save(fs,options);
返回func2(文件名、选项);
}
}

你的代码没有意义。为什么要使用泛型Func?你的代码没有意义。为什么要使用泛型Func?你的代码使代码编译(按照OP的要求),但在这种形式下Func的使用是非常无用的。你的代码使代码编译(按照OP的要求),但是在这种形式下Func的用法是非常无用的。