基于非编译时变量的返回类型

Returning type based on non-compile time variables

首先我要说我不知道​​这是否是加载资源的最佳方法,但现在我的资源管理器已在 LoadContent 向其提交内容,然后刷新其资源并存储它们在列表中。然后在游戏代码中的任何一点,我都可以调用查询资源,它 return 是我设计为 ResourceBufferElement 的类型,它在任何给定时间都包含 xna 的所有可能类型的内容,但只有其中一个不为空。

所以

//All of this is valid but only .Texture returns a non-null value
    QueryResource("texture").Texture
    QueryResource("texture").Model
    QueryResource("texture").SpriteFont

所以我想知道是否有一种方法可以让我只调用 QueryResource("") 并且它隐式 return 它代表的值。

所以我想说

//At LoadContent
    SubmitResource("texture", typeof(Texture2D))
    SubmitResource("model", typeof(Model))
//Then at calling I want to say
  Texture2D tex = QueryResource("texture")
    or
  Model mod = QueryResource("model")
//Instead of saying this
  Texture2D tex = QueryResource("texture").Texture
    or
  Model mod = QueryResource("model").Model

注意:我已经存储了类型,所以在提交时我说

    SubmitResource("", typeof(Texture2D))
  and ResourceBufferElement keeps the Type for later use

你可以这样做:

public T QueryResource<T>(string resourceName)
{
    if (T is Texture)
        return (T)QueryResource(resourceName).Texture;
    else if (T is Model)
        return (T)QueryResource(resourceName).Model;
    else if (T is SpriteFont)
        return (T)QueryResource(resourceName).SpriteFont;

    return default(T);
}

这将按照您的意愿工作:

Texture text = QueryResource<Texture>("Resource");