【问题标题】:C# enum in public variable .NET公共变量 .NET 中的 C# 枚举
【发布时间】:2013-10-09 13:34:41
【问题描述】:

对于我的程序,我创建了一个名为FinishedPiece 的新类,其中包含许多可用于我的主程序的公共变量。例如:

class FinishedPiece
{
    private double _PieceLength;
    public double PieceLength
    {
         get { return _PieceLength; }
         set { _PieceLength = value; }
    }
}

这一切都很好,因为我可以声明一个新的FinishedPiece 并添加属性:

FinishedPiece piece = new FinishedPiece();
piece.PieceLength = 48.25;

我的问题是,如何处理 enum?如果我这样做了

public enum Cut
{
    Angle = 0,
    Straight = 1,
    AngleThenStraight = 2,
    StraightThenAngle = 3
};

然后我想改变它是这样的:piece.Cut = Cut.Angle; 但我只能通过声明一个新的FinishedPiece.Cut 对象来改变它:

FinishedPiece.Cut cut = new FinishedPiece.Cut();
cut = FinishedPiece.Cut.Angle;

如何使enum 在变量中可用,以便我可以使用piece.Cut = Cut.Angle?对我来说,做这样的事情是有意义的,但它似乎不起作用。

public int Cut
{
    get { return _Cut; }
    set { _Cut = value; }

}

private enum _Cut
{
    Angle = 0,
    Straight = 1,
    AngleThenStraight = 2,
    StraightThenAngle = 3
};

提前致谢!如果我的问题不清楚,请告诉我,我会尽力提供帮助。

【问题讨论】:

  • FinishedPiece 不包含公共变量。它包含一个私有变量,它支持一个公共 property
  • _Cut 不是 int。 public 和 private 必须是同一类型

标签: c# .net class variables enums


【解决方案1】:

如何使变量内的枚举可用,这样我就可以做到 piece.Cut = Cut.Angle?

只需在您的类中定义另一个 Cut 类型的属性,例如:

public Cut Cut { get; set; }

那么你可以这样做:

FinishedPiece piece = new FinishedPiece();
piece.PieceLength = 48.25;
piece.Cut = Cut.Angle; //like this

所以你的班级会喜欢:

class FinishedPiece
{
    private double _PieceLength;
    public double PieceLength
    {
        get { return _PieceLength; }
        set { _PieceLength = value; }
    }

    public Cut Cut { get; set; }
}

考虑使用Auto-Implemented properties,如果你只有简单的setget

【讨论】:

  • +1 以分钟而不是秒击败我,并建议 AIP。 :0
  • 感谢您的回答。我接受了你关于 AIP 的建议。很高兴知道!我总是喜欢尽可能地缩短我的代码,而且确实如此。
  • @gnarlybracket,不客气,请记住,自动实现的属性在内部使用私有支持字段。但它确实缩短了代码
【解决方案2】:

像这样:

class FinishedPiece
{
    private double _PieceLength;
    public double PieceLength
    {
        get { return _PieceLength; }
        set { _PieceLength = value; }
    }
    private Cut _Cut;
    public Cut Cut
    {
        get { return _Cut; }
        set { _Cut = value; }
    }
}
public enum Cut
{
    Angle = 0,
    Straight = 1,
    AngleThenStraight = 2,
    StraightThenAngle = 3
};

那么你可以这样做:

var piece = new FinishedPiece();
piece.Cut = Cut.AngleThenStraight;

【讨论】:

    【解决方案3】:

    你可以试试这个:

        private enum Cut
        {
            //if you dont want to use any of these values as defaults 
            //just add another value and in your class private member
            //assign it like for example a value called None
            Angle = 0,
            Straight = 1,
            AngleThenStraight = 2,
            StraightThenAngle = 3
        };
    
        public class FinishedPiece
        {
            //give it a default,if like stated in the enum you dont want
            //any of those values create a None and place it here as default.
            private Cut cutObj = Cut.Angle;
    
            public Cut CutObj
            {
                get { return cutObj; }
                set { cutObj = value; }
            }
        }
    

    然后在你的调用代码中...

    FinishedPiece piece = new FinishedPiece();
    //if you dont want the default change it...
    piece.CutObj = Cut.Straight;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 2017-12-24
      • 2018-11-10
      相关资源
      最近更新 更多