簡體   English   中英

是否可以將沒有參數的方法分配給 Func<x> 在參數中</x>

[英]Is it possible to assign a method with out parameter to a Func<X> in parameter

是否可以將out參數的方法分配給Func<T1, T2>方法參數?

我可以用作參數的示例方法:

public string HelloMethod(out bool success)
{
    success = true;
    return "Hello";
};

我想這樣做的原因是我調用了一個庫,其中許多(但不是所有)方法都有帶有錯誤代碼out參數,我想創建一個方法來使用try catch log等包裝對庫的調用:

private TResult MakeLibraryCall(...func...) // what signature?
{
    try
    {
        return func(...); // unclear how to make call with out parameter
    }
    catch(Exception error)
    {
        Log(error);
    }

    return default;
}

此外,我不確定如何調用它。 我希望有類似的東西:

var greeting = MakeLibraryCall((out success) => HelloMetod(out success));

Console.WriteLine(greeting) // => Hello
Console.WriteLine(success) // => true

任何幫助表示贊賞!

根據Microsoft Doc Built-in Delegate Func<T,TResult> 其輸入參數未定義為輸出參數

public delegate TResult Func<in T,out TResult>(T arg);

所以你應該定義你的自定義委托如下:

delegate T MyDelegate<T,TInput>(out TInput input);

然后將其作為 MakeLibraryCall function 的參數,如下所示:

private string MakeLibraryCall(MyDelegate<string,bool> func) 
{
    try
    {
        bool x = true;
        return func(out x); 
    }
    catch(Exception e)
    {
        //Log(error);
    }

    return default;
}

之后調用 function MakeLibraryCall 如下:

public string HelloMethod(out bool success)
{
    success = true;
    return "Hello";
};

var greeting = MakeLibraryCall(HelloMethod);

如果要從 MakeLibraryCall 中取出func的參數,則必須將其定義為它的輸出參數,如下所示:

private string MakeLibraryCall(MyDelegate<string,bool> func, out bool success) 
    {
        try
        {
            return func(out success);  
        }
        catch(Exception e)
        {
            //Log(error);
            success = false;
        }
    
        return default;
    }

var success = false;
var greeting = MakeLibraryCall(HelloMethod,out success);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM