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