【发布时间】:2011-11-09 09:11:53
【问题描述】:
我正在制作 XNA 游戏,每次更新我都会调用以下代码 2 到 20 次。我尝试了谷歌搜索,这似乎是半慢的,所以我只是想问一下是否有更快的方法来比较类型?
代码:
public Modifier this[Type type]
{
get
{
for (int i = 0; i < this.Count; i++)
{
if (this[i].GetType() == type)
{
return this[i];
}
}
throw new NotImplementedException("Fix this");
}
set
{
for (int i = 0; i < this.Count; i++)
{
if (this[i].GetType() == type)
{
this[i] = value;
}
}
if(System.Diagnostics.Debugger.IsAttached)
System.Diagnostics.Debugger.Break();
}
}
此代码位于从 List 继承的 ModifierCollection 类中。修改器是粒子引擎的一部分。另外,我的游戏还没有处于可以实际测试的状态,所以我无法测试,但这应该可以正常工作吗?
我读到了一些关于 RunTimeTypeHandles 应该更快的东西,我应该使用它吗?
编辑:我的目标是我可以做到以下几点:
(particleEffect["NameOfEmitter"].Modifiers[typeof(SomeCoolModifier)] as SomeCoolModifier).Variable = Value;
基本上我只是想在运行时改变一些修饰符的值。
编辑 2:我刚刚意识到我可以将 Modifier 的引用保存到我目前调用它的类中:P 如果我有 5-10 个修饰符,可能不是干净的代码,但应该消除这个问题。
【问题讨论】:
-
为什么需要一个由 type 索引的映射?我能想象到的唯一用途是元编程,每帧不会发生 20 次。你确定不能只使用多态性吗?
-
不是重复的,但stackoverflow.com/questions/378643/fastest-type-comparison 应该会有所帮助。
-
最好有更明确的异常数据:
NotImplementedException("Fix this"); -
@mydogisbox:可以肯定地认为这更像是一个
// TODO:占位符。 -
@Yuck 可能,但它遵循 if 语句,所以我会假设其他情况。