[英]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.