0

私は新しいジェネリック型デリゲートで、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<> の最後の out パラメータが Func<> の戻り値の型になることはわかっています。つまり、Func<> によって返されます。

エラーを処理する方法"Not All Code Path Return Value"

4

4 に答える 4

4

まず、無限再帰を見ています。ラムダ パラメータ名から、 を受け入れるオーバーロードにアタッチするつもりでしたStream。ただし、代わりにFunc<string, SaveFlags, bool>a を受け入れるオーバーロードを取得することを意味します。string

次に、デリゲートがパラメーターを受け取る場合、現在の関数呼び出しのパラメーターを取得する必要はありません。したがって、ラムダはまったく役に立ちません。

それを考慮して:

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);
    }
}
于 2013-07-11T11:36:04.563 に答える
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);
    }
}
于 2013-07-11T11:29:23.217 に答える
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);
            }
        }
于 2013-07-11T12:20:08.060 に答える
0

パラメータを指定して func2 を実行し、その結果を返す必要があります。また、デリゲートを修復する必要があります。

Func<Stream, SaveFlags, bool> func2 = (fileStream, opt) => Save(fileStream, opt);
return func2(filename, options);

デリゲートを修復しない場合は、2 つの引数を取り、それらを無視する func2 を作成します。

于 2013-07-11T11:30:05.313 に答える