默认值C#class

TiG*_*reX 2 c#

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

public Actionresult functionOne(string a, string b, string c = "foo" )
Run Code Online (Sandbox Code Playgroud)

我试着把它转换成类似的类

public class bar
{
    public string a {get;set;}
    public string b {get;set;}
    public string c {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

并将它们作为对象接收

 public Actionresult functionOne(bar b)
Run Code Online (Sandbox Code Playgroud)

此外,我试图将defaultvalue放在'c'但不工作,我试过这个:

public class bar
{
    public string a {get;set;}
    public string b {get;set;}
    [System.ComponentModel.DefaultValue("foo")]
    public string c {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

没有发生任何事情,我收到它 null

我也试过了

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能写出这个默认值?

谢谢.

Ani*_*tel 21

如果您使用的是C#6,则可以执行以下操作:

public class Bar {
    public string a { get; set; }
    public string b { get; set; }
    public string c { get; set; } = "foo";
}
Run Code Online (Sandbox Code Playgroud)

否则你可以这样做:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Jas*_*zak 6

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

public class bar
{
    public bar() 
    {
       c = "foo";
    }

    public string a {get;set;}
    public string b {get;set;}
    public string c {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

2)使用新的自动属性默认值。 请注意,这适用于C#6+

public class bar
{

    public string a {get;set;}
    public string b {get;set;}
    public string c {get;set;} = "foo";
}
Run Code Online (Sandbox Code Playgroud)

3)使用背景字段

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;}
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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;}
        }
    }
Run Code Online (Sandbox Code Playgroud)