无法在我的程序之一中重新生成调用堆栈

问题描述 投票:0回答:1

我在使用我的应用程序时遇到问题。我怀疑生产中运行的版本可能与我的存储库中的版本不完全一致,但我不完全确定。

我每天都会收到一封电子邮件摘要,其中包含以下调用堆栈:

2024-09-17 13:15:06.697 +02:00 [Warning] Error parsing filename parts for file "C:\temp.txt".
System.ArgumentException: Requested value 'CHCR' was not found.
   at System.Enum.TryParseByName(RuntimeType enumType, ReadOnlySpan`1 value, Boolean ignoreCase, Boolean throwOnFailure, UInt64& result)
   at System.Enum.TryParse(Type enumType, ReadOnlySpan`1 value, Boolean ignoreCase, Boolean throwOnFailure, Object& result)
   at System.Enum.TryParse(Type enumType, String value, Boolean ignoreCase, Boolean throwOnFailure, Object& result)
   at Application.GetFileNameParts(String file) in C:\Application\FileResolver.cs:line 229

但是,当我检查代码中的 GetFileNameParts 方法(通过 IL Spy)时,我没有看到任何对 System.Enum.TryParse 的显式调用。该代码仅调用 System.Enum.Parse,这正是我所期望的。以下是相关代码片段:

try {
    FilePart fileParts = new();
    string messageType = "CHCR";
    fileParts.MessageType = (FileMessageType)Enum.Parse(typeof(FileMessageType), messageType, true);
} catch (Exception e) {
    _log.LogWarning(e, "Error parsing filename parts for file {file}.", file);
    return null;
}

当我使用

System.Enum.TryParse
时,我很难理解
Enum.Parse
是如何出现在堆栈跟踪中的。这可能是版本不匹配,还是有其他我可能忽略的事情?

我提供的所有详细信息都在上面的部分中。

c# .net decompiling
1个回答
1
投票

Enum.Parse
致电
Enum.TryParse

请参阅 .NET 的 源代码

Enum.Parse
的主体可能由编译器内联,不会出现在调用堆栈上。

© www.soinside.com 2019 - 2024. All rights reserved.