C# Func中并非所有代码路径返回值<&燃气轮机;泛型类型委托
我是新的泛型类型委托,尝试实现Func泛型类型委托 我正在开发winform应用程序,在该应用程序中,我试图保存我的保存函数返回的文件bool(True/False)。我知道在没有泛型委托的情况下实现非常简单,但我想在我的代码中实现泛型委托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
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的用法是非常无用的。