从C#Property getters返回Enum

时间:2009-06-18 20:26:31

标签: c# visual-studio

如何从setter / getter函数返回枚举?

目前我有这个:

    public enum LowerCase
    {
        a,
        b,
    }
    public enum UpperCase
    {
        A,
        B,
    }

    public enum Case
    {
        Upper,
        Lower,
    }

    private Enum _Case;
    private Enum _ChosenCase;


    public Enum ChooseCase
    {
        get
        {
            if ('Condition')
            {
                return LowerCase; //[need to return LowerCase]
            }
            else
            {
                return UpperCase; //[need to return UpperCase]
            }
        }
        set
        {
            _ChosenCase = value; 
        }
    }

当我尝试运行时,我收到错误:

LowerCase是'type',但用作'variable'

任何想法,我需要做什么来返回枚举????

我现在也不太确定设定价值。

如果有人可以提供一些一般性建议,我将不胜感激;大多数人应该能够看到我想要做的事情。

非常感谢。

[最新编辑]

首先感谢所有回复的人。

为了简化这个问题,似乎我使用了大写/小写的错误类比,你们中的一些人有错误的想法 - 显然不是你的错:)

这是我到目前为止的代码,允许您在ChoiceOne和ChoiceTwo之间进行选择

    public partial class CustomControl1 : Control
    {
    public enum ChoiceOne
    {
        SubChoiceA,
        SubChoiceB,
    }
    public enum ChoiceTwo
    {
        SubChoiceC,
        SubChoiceD,
    }
    public enum Choice
    {
        ChoiceOne,
        ChoiceTwo,
    }

    private Type _subChoice;
    private Choice _choice;

    public Type SetSubChoice
    {
        get
        {
            if (_choice.Equals(Choice.ChoiceOne))
            {
                return typeof(ChoiceOne); 
            }
            else
            {
                return typeof(ChoiceTwo);
            }
        }
        set
        {
            _subChoice = value; 
        }
    }

    public Choice SetChoice
    {
        get
        {
            return _choice;
        }
        set
        {
            _choice = value;
        }
    }      
    }

VisualStudio最令人满意的是属性网格允许您在ChoiceOne和ChoiceTwo之间设置正确的SetChoice属性。

问题是SetSubChoice属性是灰色的,但它确实设置为'WindowsFormsApplication4.CustomControl1 + ChoiceOne'或'WindowsFormsApplication4.CustomControl1 + ChoiceTwo',具体取决于SetChoice的设置。我想要的是能够使用SetSubChoice来选择SubChoiceA或SubChoiceB或SubChoiceC或SubChoiceD,具体取决于SetChoice的设置。

例如,如果将SetChoice设置为ChoiceOne,则SetSubChoice将允许我在ChoiceA或ChoiceB之间进行选择。 同样,如果SetChoice设置为ChoiceTwo,那么SetSubChoice将允许我在ChoiceC或ChoiceD之间进行选择。

希望这已经澄清了一些事情?

我们现在几乎就在那里:)保持想法的到来。

由于

7 个答案:

答案 0 :(得分:13)

看起来你想要:

public Case ChooseCase
{
    get { return 'Condition' ? Case.Lower : Case.Upper; }
}

或者我完全错过了这一点?

答案 1 :(得分:3)

错误是正确的。它与执行此操作基本相同

public int ChooseCase
{
    get{ return int; }
}

你要做的是使用真正的类 - 而不是枚举 - 具有共同的基础。

public abstract class Case
{
    public abstract string ModifyString(string value);
}

public class UpperCase : Case
{
    public override string ModifyString( string value )
    { 
        return String.ToUpper( value ); 
    }
}

答案 2 :(得分:2)

你将两个枚举混合在一起并不是一个好主意,因为它违背了枚举类型的目的。

肯定要强制转换为int并以这种方式进行比较 - 您将失去在未来版本中更改枚举值顺序的能力。

答案 3 :(得分:2)

我认为您可能误解了使用枚举的原因。枚举是一种特殊类型的变量,只能采用一组特定的值。例如。布尔值是一个非常特殊的枚举情况。布尔变量是一个只能取2个值的值 - “true”或“false”。

您已定义了枚举:

public enum LowerCase
    {
        a,
        b,
    }

这意味着LowerCase类型的变量只能设置为a或b。这并没有多大用处。

你的其他枚举更明智:

public enum Case
    {
        Upper,
        Lower,
    }
Case类型的变量可以设置为“Upper”或“Lower”。现在,当您定义枚举类型的变量时,可以指定所需的类型。您已完成此操作:
private Enum case;
但您认为的意思是:
private Case case;
这定义了一个名为Case的{​​{1}}类型的私有变量。 enum关键字仅在定义新枚举时使用,而不是在定义枚举类型的变量时使用。

同样,在您定义属性的位置,您应该使用要返回的枚举类型:

public Case ChooseCase
{...
在尝试返回枚举值的位置,您应该这样做:
return Case.Lower

答案 4 :(得分:1)

使用类型...即..


public Type ChooseCase{
    get{ return typeof(Uppercase); }
}

答案 5 :(得分:0)

抛出该错误是因为LowerCase是一种类型。想象一下,如果你想写这个陈述。

return Int32;

这不起作用,因为Int32是一个类型而不是变量。您需要创建一个LowerCase实例,然后您可以将其返回。

答案 6 :(得分:0)

您可能应该使用基类Case和两个派生类,以便您的ChooseCase属性返回相应类的对象:

abstract class Case
{
    abstract char GetItem(int index);
}

class LowerCase : Case
{
    override char GetItem(int index)
    {
        // Not sure for the following
        Encoding ascii = Encoding.ASCII;
        return ascii.GetString(ascii.GetBytes("a")[0] + index)[0];
    }
}

class UpperCase : Case
{
    // The same for the upper case
}

public Case ChooseCase
{
    get
    {
        if (condition)
        {
            return new LowerCase();
        }
        else
        {
            return new UpperCase();
        }
    }
}

这是一个你无法用enum做的事情,因为它们都完全来自Enum。