检查字符串类型的类成员的值,该类成员只能假设几个值

本文关键字:成员 几个 假设 类型 字符串 检查 | 更新日期: 2023-09-27 18:25:33

通过对XML模式文件运行xsd /c,我创建了以下partial类:

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="example.com")]
public partial class FRUITQueryType {
    private string fruitTypeField;
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string FruitType {
        get {
            return this.fruitTypeField;
        }
        set {
            this.fruitTypeField = value;
        }
    }
}

虽然类型是string,但我知道该字段只有三个可能的值,即BananaOrangeBlueberry

在程序的另一部分,我检查该字段的内容:

// assume fruit is an instance of FRUITQueryType
if (fruit.FruitType == "Banana")
{
    // do something
}

然而,由于字段只有几个可能的值,因此这种方法感觉不到整洁。我认为如果我能沿着以下几行检查字段的值会更好:

if (fruit.FruitType == FRUITQueryType.FruitType.Banana) // or something similar

实现这一点有意义吗?如果是,最好的方法是什么?通过创建一个包含BananaOrangeBlueberry的三个静态成员的类/结构?

检查字符串类型的类成员的值,该类成员只能假设几个值

我想出了一个临时的解决方案——虽然不理想,但能完成任务。

我将这三个字符串定义为扩展类中的常量:

public partial class FRUITQueryType
{
    public const string Banana = "Banana";
    public const string Orange = "Orange";
    public const string Blueberry = "Blueberry";
    // ...
}

这样检查就变成了:

if (fruit.FruitType == FRUITQueryType.Banana)

我必须说,我对这个解决方案并不完全满意,因为它感觉像是把课堂弄得一团糟。然而,如果我在一个子类/结构中定义了常量(比如public struct FruitChoice),那么检查也会变得更加困难(if (fruit.FruitType == FRUITQueryType.FruitChoice.Banana)

有人想出一个更整洁的方法吗?