构建到UWP和Il2CPP后,通用方法中AOT的问题(提前)

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

我有一个通用方法,试图使用我自己的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.

这可能是什么原因,我该如何解决?

我有一个通用方法,试图使用我自己的TryGetValue通过键从字典中获得通用值,例如(当然,对基本方法有很多限制)public class BaseExample {public ...

c# unity3d uwp il2cpp
1个回答
0
投票

经过进一步研究并测试出为什么会发生这种情况的结论如下:

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