我創建了以下擴展:
public static class StackTraceExtensions
{
public static string Callers(this StackTrace trace)
{
return string.Join(" < ", trace.GetFrames().Select(sf => sf.GetMethod().DeclaringType.Name "." sf.GetMethod().Name));
}
}
GetMethod()但每次打電話都不是一個好的解決方案。我尋找某種方法來創建一個中間變數,就像 LINQ.Select函式一樣。
.Select僅適用于IEnumerable并且適用于多個值,因此我開發了另一個擴展,這次適用于任何物件:
public static class ObjectExtensions
{
public static TResult Self<TSource, TResult>(this TSource source, Func<TSource, TResult> selector) => selector(source);
}
此擴展可以按如下方式使用:
public static class StackTraceExtensions
{
public static string Callers(this StackTrace trace)
{
return string.Join(" < ", trace.GetFrames().Select(sf => sf.GetMethod().Self(mb => $"{mb.DeclaringType.Name}.{mb.Name}")));
}
}
它允許我在這里處理中間mb“變數”。
是否有一些標準擴展可以做到這一點,所以我不需要創建自己的?
uj5u.com熱心網友回復:
您可以先選擇方法,然后在后續使用它Select:
return string.Join(" < ", trace.GetFrames()
.Select(sf => sf.GetMethod())
.Select(m => $"{m.DeclaringType.Name}.{m.Name}"));
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/454018.html
下一篇:按布爾分組會產生錯誤的結果
