首页 > 解决方案 > 在 C# 程序中使用枚举内部属性来增加投票计数器

问题描述

这是我的要求,

我必须设计一个名为 Post 的类。此类为 StackOverflow 帖子建模。它应该具有标题、描述和创建日期/时间的属性。我们应该能够对帖子投赞成票或反对票。我们还应该能够看到当前的投票值。在 main 方法中,创建一个帖子,对其进行几次投票和投票,然后显示当前投票值。在本练习中,您将了解到 StackOverflow 帖子应提供向上投票和向下投票的方法。您不应赋予从外部设置 Vote 属性的能力,否则可能会意外更改类的投票为 0 或随机数。这就是我们在程序中创建错误的方式。该类应始终保护其状态并隐藏其实现细节。

到目前为止我是如何接近的,

public class Post
    {
        private int _vote;
        private string _title;
        private string _description;
        private DateTime _cratedDate;
        private Vote _voteType;
        public Post(string title,string description,DateTime createdDate)
        {
            _vote = 0;
            _title = title;
            _description = description;
            _cratedDate = createdDate;
        }

        public enum Vote
        {
            Upvote=1,
            DownVote=-1
        }

        public Vote CurrentVote
        {
            set
            {
                // I want something like this..
                //if _voteType is upVote then ++_vote else -- _vote
                _voteType = value;
            }
        }

        public int ShowCurrentVote()
        {
            return _vote;
        }
    }

和主要方法,

static void Main(string[] args)
        {
            Post post = new Post("POST1", "POST 1 DESCRIPTION !!!", DateTime.Now);
            // 5 upvotes..
            post.CurrentVote = Post.Vote.Upvote;
            post.CurrentVote = Post.Vote.Upvote;
            post.CurrentVote = Post.Vote.Upvote;
            post.CurrentVote = Post.Vote.Upvote;
            post.CurrentVote = Post.Vote.Upvote;

            // 2 - downvotes
            post.CurrentVote = Post.Vote.DownVote;
            post.CurrentVote = Post.Vote.DownVote;
            // current vote status..
            Console.WriteLine(post.ShowCurrentVote());
        }

现在我想以这种方式设计房产..

public Vote CurrentVote
        {
            set
            {
                // I want something like this..
                //if _voteType is upVote then ++_vote else -- _vote
                _voteType = value;
            }
        }

但是不知道如何实现

标签: c#

解决方案


例如,您可以定义一个设置投票的公共方法:

public void Vote(Vote vote)
{
    switch (vote)
    {
        case Vote.DownVote:
            _vote--;
            break;
        case Vote.Upvote:
            _vote++;
            break;
    }
}

...以及一个返回当前计数的只读属性:

public int CurrentVote => _vote;

推荐阅读