gpt4 book ai didi

c# - 当从 C# 中的动态获取属性时,如何检查枚举属性?

转载 作者:太空狗 更新时间:2023-10-29 21:49:53 25 4
gpt4 key购买 nike

假设我知道一个对象的属性 Color 返回一个如下所示的枚举:

enum ColorEnum {
Red,
Green,
Blue
};

并且我想检查未知类型的特定对象(我知道它具有 Color 属性)是否已将 Color 设置为 Red。如果我知道对象类型,我会这样做:

ObjectType thatObject = obtainThatObject();
if( thatObject.Color == ColorEnum.Red ) {
//blah
}

问题是我没有使用 ColorEnum 对程序集的引用,也不知道对象类型。

所以我有以下设置:

dynamic thatObject = obtainThatObject();

而且我无法转换,因为我不知道对象类型(和枚举类型)。我应该如何检查颜色

if( thatObject.Color.ToString() == "Red" ) {
//blah
}

确实有效,但它看起来像是我在“The Daily WTF”中看到的最糟糕的 cargo 崇拜代码示例。

如何正确进行检查?

最佳答案

在侧面组装:

enum ColorEnum
{
Red,
Green,
Blue
};

我们知道存在红色,但对其他颜色一无所知。因此,我们仅使用已知值重新定义程序集中的枚举。

enum KnownColorEnum // in your assembly
{
Red
};

因此我们可以进行解析:

public static KnownColorEnum? GetKnownColor(object value)
{
KnownColorEnum color;

if (value != null && Enum.TryParse<KnownColorEnum>(value.ToString(), out color))
{ return color; }

return null;
}

例子:

// 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
{ }

关于c# - 当从 C# 中的动态获取属性时,如何检查枚举属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28853556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com