我正在尝试返回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”。
如何在不影响性能的情况下实现这一目标?
这个属性每帧调用超过一千次(这是一个游戏)。
答案 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
}
}