我有一个通用的方法来尝试使用我自己的TryGetValue
喜欢通过键从字典中获取通用值(当然裁剪了很多基本的)
public class BaseExample
{
public virtual bool TryGetValue<T>(string key, out T value)
{
value = default;
return false;
}
}
public class Example : BaseExample
{
private Dictionary<string, Item> _items = new Dictionary<string, Item>();
public override bool TryGetValue<T>(string key, out T value)
{
value = default;
if (!GetItem(key, value, out var setting)) { return false; }
value = (T)setting.Value;
return true;
}
private bool GetItem<T>(string key, T value, out Item item)
{
item = null;
if (!_items.ContainsKey(key))
{
item = null;
return false;
}
item = _items[key];
return true;
}
}
这在 Unity 编辑器中有效,但是一旦我尝试使用例如运行该方法,它就会构建到 UWP 和 IL2CPP
var value = example.TryGetValue<int>("SomeKey");
它抛出一个
System.ExecutionEngineException: Attempting to call method 'Example::TryGetValue<System.Int32>' for which no ahead of time (AOT) code was generated.
这可能是什么原因,我该如何解决?