Érdekes esetbe ütköztem.
private static string SettingName()
{
StackTrace st = new StackTrace();
StackFrame sf = st.GetFrame(2);
return sf.GetMethod().Name.Substring(4);
}
private static object GetItemFromStore()
{
return GetItemFromStore((PersistentSettingsKeys)Enum.Parse(
typeof(PersistentSettingsKeys),
SettingName()));
}
No, ami ebben érdekes, hogy a debug verzió simán lefut, a release viszont elszáll, mert a stack frame 1-el rövidebb! A Jitter inlineosítja a SettingName-et, így a reflection is eggyel elcsúszik. Ez nekem azért meglepő, mert az IL kódban még nincs inline-osítás (ok, az nem is egy managed compiler dolga), de ami meglepő, hogy a jitter inline látszik a reflectionön keresztül. A megoldás persze elég egyszerű,
[MethodImpl(MethodImplOptions.NoInlining)]
kell a SettingName elé.
(Ha valaki tudna segíteni hogyan lehet kódot szépen elhelyezni wordpressben kérdem segítsen.)