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