默认值C#class


Default value C# class

本问题已经有最佳答案,请猛点这里访问。

嗨,伙计们,我在控制器中有一个函数,我收到一个表单的信息,实际上我有这个代码:

1
public Actionresult functionOne(string a, string b, string c ="foo" )

我试着把它转换成

1
2
3
4
5
6
public class bar
{
    public string a {get;set;}
    public string b {get;set;}
    public string c {get;set;}
}

把它们当作一个物体来接收

1
 public Actionresult functionOne(bar b)

此外,我尝试将默认值放入"c",但不起作用,我尝试了以下操作:

1
2
3
4
5
6
7
public class bar
{
    public string a {get;set;}
    public string b {get;set;}
    [System.ComponentModel.DefaultValue("foo")]
    public string c {get;set;}
}

没发生什么事,我收到的名字是null

我也尝试过

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class bar
{
    public string a {get;set;}
    public string b {get;set;}
    public string c
    {
        get
        {
            return  c;
        }
        set
        {
            c="foo"; //I also tried with value
        }
    }
}

我应该怎么写这个默认值?

谢谢。


如果您使用的是C 6,您可以这样做:

1
2
3
4
5
public class Bar {
    public string a { get; set; }
    public string b { get; set; }
    public string c { get; set; } ="foo";
}

否则,您可以这样做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Bar {
    public string a { get; set; }
    public string b { get; set; }
    private string _c ="foo";
    public string c
    {
        get
        {
            return _c;
        }
        set
        {
            _c = value;
        }
    }
}


1)使用对象的构造函数:

1
2
3
4
5
6
7
8
9
10
11
public class bar
{
    public bar()
    {
       c ="foo";
    }

    public string a {get;set;}
    public string b {get;set;}
    public string c {get;set;}
}

2)使用新的自动属性默认值。请注意,这是针对C 6+:

1
2
3
4
5
6
7
public class bar
{

    public string a {get;set;}
    public string b {get;set;}
    public string c {get;set;} ="foo";
}

3)使用支持字段

1
2
3
4
5
6
7
8
9
10
public class bar
{
    var _c ="foo";
    public string a {get;set;}
    public string b {get;set;}
    public string c {
       get {return _c;}
       set {_c = value;}
    }
}

4)使用空合并运算符检查

1
2
3
4
5
6
7
8
9
10
public class bar
    {
        string _c = null;
        public string a {get;set;}
        public string b {get;set;}
        public string c {
           get {return _c ??"foo";}
           set {_c = value;}
        }
    }


您是否尝试过设置c值的默认构造函数?

1
2
3
4
5
6
7
8
9
10
11
public class Bar
{
    public string A { get; set; }
    public string B { get; set; }
    public string C { get; set; }

    public Bar()
    {
        C ="foo";
    }
}


可以在构造函数中指定默认值

1
2
3
4
5
6
7
8
9
10
11
public class bar
{
    public bar()
    {
        this.c ="foo";
    }

    public string a {get;set;}
    public string b {get;set;}
    public string c {get;set;}
}

无论何时创建bar对象,都将调用构造函数,并将c初始化为"foo"。

稍后,当其他方法被称为c时,它的值将更新为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class bar
{
    public bar()
    {
        this.c ="foo";
    }

    public string a {get;set;}
    public string b {get;set;}
    public string c {get;set;}

    public void UpdadateValueofC(string updatedvalueofc)
    {
        this.c = updatedvalueofc;
    }
}