在应用程序中工作,并为异常列出了以下扩展方法:
public static void FillData(this Exception target, object data)
{
if (target == null)
throw new ArgumentNullException("target");
if (data == null)
throw new ArgumentNullException("data");
string stackTraceSite = target.LastStackTraceSite();
var stringDict = new System.Collections.Specialized.StringDictionary();
PropertyInfo[] pis = data.GetType().GetProperties();
int pisLen = pis.Length;
for (int i = 0; i < pisLen; i++)
{
string key = (stackTraceSite != null ? stackTraceSite + '.' : null) + pis[i].Name;
try
{
target.Data[key] = pis[i].GetValue(data, null) ?? "null";
}
catch (ArgumentException ae)
{
target.Data[key] = "ARGUMENT EXCEPTION -> " + ae.Message;
}
}
}
然后以类似的方式调用或使用它:
try
{
// Perform some dangerous operation that throws an exception
}
catch (Exception ex)
{
ex.FillData(new { CustId = 4, Category = "Foo", Style = "bar" });
Logger.LogError(ex);
}
匿名类型的成员(如示例中所示)在某些情况下被“重用”,但在许多其他情况下,它们完全不同。(例如new { FileType = Enum.FileType.RejectionLetter, FilePath = loadFilePath }
)
这种代码在很多地方和一个会获得大量流量的网络应用程序中使用。我想知道的一个问题是:所有这些匿名类的定义最终会陷入困境/崩溃/创建一个即使/当它们没有被捕获时,显着的内存负载?