sha*_*oth 6 .net c# enums dynamic late-binding
假设我知道Color对象的属性返回一个如下所示的枚举:
enum ColorEnum {
Red,
Green,
Blue
};
Run Code Online (Sandbox Code Playgroud)
我想检查一个未知类型的特定对象(我知道有Color属性)已Color设置为Red.如果我知道对象类型,这就是我要做的事情:
ObjectType thatObject = obtainThatObject();
if( thatObject.Color == ColorEnum.Red ) {
//blah
}
Run Code Online (Sandbox Code Playgroud)
问题是我没有对程序集的引用,ColorEnum也不知道对象类型.
所以我有以下设置:
dynamic thatObject = obtainThatObject();
Run Code Online (Sandbox Code Playgroud)
而我无法施放,因为我不知道对象类型(和枚举类型).我应该怎么检查Color?
if( thatObject.Color.ToString() == "Red" ) {
//blah
}
Run Code Online (Sandbox Code Playgroud)
确实有效,但它看起来像我在"每日WTF"中看到的货物崇拜代码中最糟糕的例子.
我该如何正确检查?
在侧面装配中:
enum ColorEnum
{
Red,
Green,
Blue
};
Run Code Online (Sandbox Code Playgroud)
我们知道红色的存在,但不知道其他颜色。因此,我们仅使用已知值重新定义程序集中的枚举。
enum KnownColorEnum // in your assembly
{
Red
};
Run Code Online (Sandbox Code Playgroud)
因此我们可以进行解析:
public static KnownColorEnum? GetKnownColor(object value)
{
KnownColorEnum color;
if (value != null && Enum.TryParse<KnownColorEnum>(value.ToString(), out color))
{ return color; }
return null;
}
Run Code Online (Sandbox Code Playgroud)
例子:
// thatObject.Color == ColorEnum.Red
// or
// thatObject.Color == "Red"
if (GetKnowColor(thatObject.Color) == KnownColorEnum.Red) // true
{ }
// thatObject.Color == ColorEnum.Blue
if (GetKnowColor(thatObject.Color) == KnownColorEnum.Red) // false
{ }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
543 次 |
| 最近记录: |