Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用enum inside属性增加C#程序中的投票计数器_C# - Fatal编程技术网

使用enum inside属性增加C#程序中的投票计数器

使用enum inside属性增加C#程序中的投票计数器,c#,C#,这是我的要求, 我必须设计一个叫做Post的类。此类为StackOverflow post建模。它应该有属性 用于标题、说明和创建日期/时间。我们应该可以投赞成票或反对票 职位。我们还应该能够看到当前的投票值。在main方法中,创建一个post, 向上投票和向下投票几次,然后显示当前投票值。 在本练习中,您将了解StackOverflow post应该提供向上投票的方法 和向下投票。您不应授予从外部设置投票属性的功能, 因为否则,您可能会意外地将类的投票更改为0或随机 号码。这就是我们如何在程序

这是我的要求,

我必须设计一个叫做Post的类。此类为StackOverflow post建模。它应该有属性 用于标题、说明和创建日期/时间。我们应该可以投赞成票或反对票 职位。我们还应该能够看到当前的投票值。在main方法中,创建一个post, 向上投票和向下投票几次,然后显示当前投票值。 在本练习中,您将了解StackOverflow post应该提供向上投票的方法 和向下投票。您不应授予从外部设置投票属性的功能, 因为否则,您可能会意外地将类的投票更改为0或随机 号码。这就是我们如何在程序中产生bug的原因。该类应始终保护其 声明并隐藏其实现细节

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

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;
            }
        }

但是不知道如何实现这个

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

public void Vote(Vote vote)
{
    switch (vote)
    {
        case Vote.DownVote:
            _vote--;
            break;
        case Vote.Upvote:
            _vote++;
            break;
    }
}
…和返回当前计数的只读属性:

public int CurrentVote => _vote;

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

public void Vote(Vote vote)
{
    switch (vote)
    {
        case Vote.DownVote:
            _vote--;
            break;
        case Vote.Upvote:
            _vote++;
            break;
    }
}
…和返回当前计数的只读属性:

public int CurrentVote => _vote;

以这种方式设置
CurrentVote
意味着您每次都会覆盖该值,而不是按您想要的方式递增该值。不要将
Vote
枚举定义为
Post
类的成员。调用方将被要求限定名称,这对他们来说是不必要的麻烦,而且这将阻止您调用方法
Vote
,正如mm8的回答所示。实际上,在这个阶段,您应该避免定义嵌套类型period。以这种方式设置
CurrentVote
意味着您每次都会覆盖该值,而不是按您想要的方式递增它。不要将
Vote
枚举定义为
Post
类的成员。调用方将被要求限定名称,这对他们来说是不必要的麻烦,而且这将阻止您调用方法
Vote
,正如mm8的回答所示。实际上,在这个阶段,您应该避免定义嵌套类型period。