我是新的通用类型代理并尝试实现 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"
答案 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);
}
}