Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.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
C# 如何为ASP.NET中自动实现的属性设置默认值_C#_Asp.net_Default Value_Automatic Properties - Fatal编程技术网

C# 如何为ASP.NET中自动实现的属性设置默认值

C# 如何为ASP.NET中自动实现的属性设置默认值,c#,asp.net,default-value,automatic-properties,C#,Asp.net,Default Value,Automatic Properties,我知道C#3.0附带了一个自动实现属性的新特性,我喜欢它,因为我们不必在此声明额外的私有变量(与早期的属性相比),早期我使用了一个属性,即 private bool isPopup = true; public bool IsPopup { get { return isPopup; } set { isPopup = value; } } 现在我已经将其转换为自动实现的属性,即 public bool IsPopup {

我知道C#3.0附带了一个自动实现属性的新特性,我喜欢它,因为我们不必在此声明额外的私有变量(与早期的属性相比),早期我使用了一个属性,即

private bool isPopup = true;
public bool IsPopup
{
    get
    {
      return isPopup;
    }
    set
    {
      isPopup = value;
    }
}
现在我已经将其转换为自动实现的属性,即

public bool IsPopup
{
    get; set;
}

我想在不使用它的情况下将此属性的默认值设置为true即使在page_init方法中,我也尝试了,但没有成功,有人能解释如何执行此操作吗?

您可以在默认构造函数中初始化此属性:

public MyClass()
{
   IsPopup = true;
}
使用C#6.0,可以像普通成员字段一样在声明处初始化属性:

public bool IsPopup { get; set; } = true;  // property initializer
现在甚至可以创建一个真正的只读自动属性,可以直接初始化,也可以在构造函数中初始化,但不能在类的其他方法中设置

public bool IsPopup { get; } = true;  // read-only property with initializer

您是否尝试过

为自动属性指定的属性不适用于支持字段,因此默认值的属性不适用于此类型的属性

但是,您可以初始化自动属性:

VB.NET

Property FirstName As String = "James"
Property PartNo As Integer = 44302
Property Orders As New List(Of Order)(500)
C#6.0及以上版本

public string FirstName { get; set; } = "James";
public int PartNo { get; set; } = 44302;
public List<Order> Orders { get; set; } = new List<Order>(500);
publicstringfirstname{get;set;}=“James”;
公共int PartNo{get;set;}=44302;
公共列表顺序{get;set;}=新列表(500);
C#5.0及以下版本


不幸的是,6.0以下的C#版本不支持此功能,因此您必须在构造函数中初始化自动属性的默认值。

您可以像下面一样使用默认属性值

using System.ComponentModel;

[DefaultValue(true)]
public bool IsPopup
{
    get
    {
      return isPopup;
    }
    set
    {
      isPopup = value;
    }
}
此方法的一个优点是不需要检查布尔类型的空值

using System.ComponentModel; 

public class ClassName
 {
   [DefaultValue(true)]
   public bool IsPopup{ get; set; }
 }

在构造函数库中初始化它,我认为这是唯一的方法。为了寻找更具体的答案,我必须在构造函数中编写额外的代码,如果不使用旧的约定,就无法在自动实现的属性本身中编写它。不知怎的,你必须初始化属性。由于没有支持字段(由编译器生成),因此没有其他选项。在这种情况下,我编写了完整的属性,幸运的是您得到了intellisense来完成这项工作。@slfan您能详细说明一下吗?我开始使用汽车,并试图了解基本原理。你的回答是有道理的,但是你的评论(正如我读到的)似乎与之相矛盾——我确信我误解了你在评论中所说的话,尽管你的回答不正确,并且没有得票。目前这是唯一的办法。在即将到来的C#6.0中,将有可能直接初始化该属性。只有当我必须在setter或getter中编写代码时,我才使用完整属性。好吧,所以我发现这不是正确的方法。DefaultValueAttribute似乎只是指示元数据属性可以有默认值,而不是实际设置它。所以我希望这对某人有所帮助。你看到Akshat Jeewan Sharma的答案了吗?是吗“复制和粘贴“?请参阅@Jeewan Sharma的答案,以了解这不是正确的方法。这实际上并没有设置默认值,它只是指示默认值应该是什么be@JoeFlateau你能解释一下这两种方法的区别吗?因为当我从控制器访问该属性时,它的值是真的。那么?DefaultValue纯粹是信息性的,Visual Studio会将该值显示为非粗体。很好的编辑Eagle Eye,感谢您将其更新为包含C#6.0。