簡體   English   中英

使用c#對象初始化對類成員進行條件初始化

[英]conditional initialization of class member using c# object initialization

我有一個簡單的類,具有3個不為null的整數成員

public class Test
{
    public int Test1 { get; set; }
    public int Test2 { get; set; }
    public int Test3 { get; set; }
}

現在我想使用這樣的東西

        int? var1 = null;
        int var2 = 2;
        int var3 =5;
       var t =  new Test
        {
            Test1 = var1, // (error) Initialize Test1 only when var1 is not null
            Test2 = var2,
            Test3 = var3
        };

即我只想僅在var1不為null的情況下初始化成員Test1,所以以某種方式我需要在初始化時進行檢查。 我知道這是一個簡單的問題,可以通過不同的方式完成,但是當我重構現有代碼並對其進行概括時,我僅需要通過對象初始化解決方案。 對我來說看起來很簡單,但是我自己卻無法找到解決方案

沒有太多經驗的程序員,所以非常感謝任何幫助

我認為那還是無法編譯。 但是,無論哪種方式,如果不初始化,該值都將獲取int的默認值。 等效項為:

    int? var1 = null;
    int var2 = 2;
    int var3 =5;
    var t =  new Test
    {
        Test1 = var1.GetValueOrDefault(),
        Test2 = var2,
        Test3 = var3
    };

Test1的默認值為零,因此您可以使用null-coallescing運算符:

var t =  new Test {
    Test1 = var1 ?? 0,
    Test2 = var2,
    Test3 = var3
};

如果該類除默認int之外還可以指定其他默認值,或者由於其他原因,當var1null時根本不需要調用屬性設置器,那么您就不能對Test1使用對象初始化語法。 (我知道這個問題說要使用對象初始化,但以防萬一無法使用...)

public class Test
{
    public int Test1 { get; set; }
    public int Test2 { get; set; }
    public int Test3 { get; set; }

    public Test()
    {
        Test1 = -1;
    }
}

var t =  new Test
    {
        Test2 = var2,
        Test3 = var3
    };
if (var1 != null) // or (var1.HasValue)
    t.Test1 = var1.Value;

如果不是這種情況,則可以選擇此答案或任何其他答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM