【问题标题】:Default value C# class [duplicate]默认值 C# 类 [重复]
【发布时间】:2015-07-31 14:39:38
【问题描述】:

我在控制器中有一个函数,我收到了表单的信息。我有这个代码:

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

我试图将其转换为类似的类

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

并将它们作为对象接收

 public Actionresult functionOne(bar b)

我还尝试将默认值放在“c”中但不起作用,我尝试了这个:

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

什么都没发生,我收到的是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
        }
    }
}

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

【问题讨论】:

  • 也许在构造函数中放一个默认值?
  • [DefaultValue] 属性确实没有任何作用;它旨在让设计人员能够确定您初始化属性的值。
  • 嗨。 DefaultValueAttribute 不会导致成员使用属性值自动初始化。您必须在代码中设置初始值。当读取反射中的任何成员为空时,DefaultValueAttribute 对反射有用,使用此属性查找或设置默认值。

标签: c#


【解决方案1】:

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

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

否则你可以这样做:

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

【讨论】:

  • 我已经尝试过 c#6 代码但无法正常工作,另一个很好,谢谢。
  • @TiGreX 那么我猜你使用的是 C# 5 或更早版本。
【解决方案2】:

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

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

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

2) 利用新的自动属性默认值。 Note that this is for C# 6+:

public class bar
{

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

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

4) 使用Null Coalescing Operator 检查

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

【讨论】:

    【解决方案3】:

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

    public class Bar
    {
        public string A { get; set; }
        public string B { get; set; }
        public string C { get; set; }
    
        public Bar()
        {
            C = "foo";
        }
    }
    

    【讨论】:

    • 我尽量减少行数
    【解决方案4】:

    您可以在构造函数中分配默认值

    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 将使用其值更新,例如

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

    【讨论】:

      猜你喜欢
      • 2010-09-27
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-30
      • 2014-11-14
      • 2016-10-31
      • 2014-02-10
      • 2016-03-06
      相关资源
      最近更新 更多