Func<>;泛型类型委托

本文关键字:泛型类型 gt lt Func | 更新日期: 2023-09-27 18:21:54

我是新的泛型类型委托,并尝试实现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**
}

我知道Func<>的最后一个输出参数是什么它成为Func<>的返回类型即它通过Func<>返回。

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

Func<>;泛型类型委托

首先,您将看到无限递归。根据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);
    }
}

调用您的函数。

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);
    }
}

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

Func<Stream, SaveFlags, bool> func2 = (fileStream, opt) => Save(fileStream, opt);
return func2(filename, 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);
            }
        }