【发布时间】:2015-03-04 11:42:49
【问题描述】:
假设我知道一个对象的属性Color 返回一个看起来像这样的枚举:
enum ColorEnum {
Red,
Green,
Blue
};
并且我想检查未知类型的特定对象(我知道具有Color 属性)是否将Color 设置为Red。如果我知道对象类型,我会这样做:
ObjectType thatObject = obtainThatObject();
if( thatObject.Color == ColorEnum.Red ) {
//blah
}
问题是我没有 ColorEnum 对程序集的引用,也不知道对象类型。
所以我有以下设置:
dynamic thatObject = obtainThatObject();
我不能转换,因为我不知道对象类型(和枚举类型)。我应该如何查看Color?
if( thatObject.Color.ToString() == "Red" ) {
//blah
}
确实有效,但它看起来像是我在“The Daily WTF”中看到的最糟糕的货物崇拜代码示例。
如何正确进行检查?
【问题讨论】:
-
你知道侧组件中枚举类型的所有可能值及其数值表示吗?
-
@YohDeadfall 我宁愿不依赖它——没人知道那里发生了什么变化。
-
你对
obtainThatObject()(及其返回类型)有影响吗? -
@stefankmitph 不,我实现了一个回调,它的参数类型为
object,我必须处理引用绑定的任何内容。 -
如果枚举中不存在值“Red”,您是否希望例外?我认为这可能是最好的?
标签: c# .net dynamic enums late-binding