通用类型函数(属性)

时间:2017-05-20 20:26:28

标签: c#

我正在尝试返回T类型值。

public T this[int index]
{
     get
     {
           if (typeof(T) == typeof(int))
              return (T) dynEx[index].Int;
           else if (typeof(T) == typeof(string))
              return (T) dynEx[index].Str;
     }
}

dynEx是一个复杂的对象,它根据一些自定义表达式返回一个对象。

上面的代码显然不起作用,因为它有一个错误:“无法将类型'int'转换为T”和“无法将类型'字符串'转换为T”。

如何在不影响性能的情况下实现这一目标?

这个属性每帧调用超过一千次(这是一个游戏)。

1 个答案:

答案 0 :(得分:3)

为了转换为int,您需要首先将结果转换为object,可能是拳击。它很烦人,但遗憾的是它是C#泛型的限制 - 不幸的是,有很多理由让我现在逃脱了。所以你想要:

public T this[int index]
{
    get
    {
        if (typeof(T) == typeof(int))
        {
            return (T) (object) dynEx[index].Int;
        }
        else if (typeof(T) == typeof(string))
        {
            return (T) (object) dynEx[index].Str;
        }
        // TODO: Whatever you want to happen if T isn't int/string
    }
}