C#無參數初始化類屬性,用于在ctor中設置字段參數

我目前正在解決一些我已經解決了至少五次的問題。讓我們上這樣的課。這是一個有效的解決方案,但我必須通過ctor中的參數初始化類。

public class ArrayBenchmark
{
    private readonly int[] _numbers;

    public ArrayBenchmark(uint elementCount)
    {
        _numbers = Enumerable
            .Range(0, (int)elementCount)
            .Select(_ => new Random().Next(-9, 10))
            .ToArray();
    }

如果我想以無參數的方式使用它,它是不起作用的,因為ctor有一定的優先級,所以字段總是用默認的屬性值初始化。下面的代碼示例。

public class ArrayBenchmark
{
    private readonly int[] _numbers;

    public uint ElementCount { get; init; } = 1;

    public ArrayBenchmark()
    {
        _numbers = Enumerable
            .Range(0, (int)ElementCount)
            .Select(_ => new Random().Next(-9, 10))
            .ToArray();
    }
var benchmarkWith10Elements = new ArrayBenchmark { ElementCount = 10 };
benchmarkWith10Elements.CalculateAllComplexities();

那么,有沒有辦法通過無參數類初始化來填充屬性中的字段參數呢?謝謝大家

? 最佳回答:

您想要什么是不可能的,因為在初始化屬性之前會調用無參數構造函數。這

var benchmarkWith10Elements = new ArrayBenchmark { ElementCount = 10 };

是與(的語法糖)相同的代碼。。。

var benchmarkWith10Elements = new ArrayBenchmark(); // here ElementCount is 1
benchmarkWith10Elements.ElementCount = 10;

因此,您需要一個帶有ElementCount參數的構造函數:

public ArrayBenchmark(uint elementCount)
{
    ElementCount = elementCount;
    _numbers = Enumerable
        .Range(0, (int)ElementCount)
        .Select(_ => new Random().Next(-9, 10))
        .ToArray();
}
主站蜘蛛池模板: 国产精品一区二区香蕉| 一区二区传媒有限公司| 大帝AV在线一区二区三区| 色综合视频一区二区三区| 日韩精品一区二区三区老鸦窝| 人体内射精一区二区三区| 国产亚洲3p无码一区二区| 免费萌白酱国产一区二区| 毛片一区二区三区无码| 亚洲色无码专区一区| 国产福利微拍精品一区二区| 无码国产精品一区二区免费3p| 久久影院亚洲一区| 国产福利电影一区二区三区,日韩伦理电影在线福 | 日韩精品无码Av一区二区| 国产欧美色一区二区三区| 中文字幕AV一区二区三区| 波多野结衣一区二区三区| 日韩一区二区超清视频| 久久精品无码一区二区WWW| 亚洲一区在线观看视频| 2018高清国产一区二区三区| 老熟妇仑乱一区二区视頻| 精品黑人一区二区三区| 亚洲精品日韩一区二区小说| 午夜视频一区二区三区| 国产在线视频一区二区三区| 国产在线一区视频| 亚洲欧洲一区二区三区| 中文字幕一区二区三区日韩精品| 99国产精品一区二区| 亚洲爆乳无码一区二区三区| 91视频一区二区| 日韩成人一区ftp在线播放| 无码一区二区三区亚洲人妻| 视频一区在线免费观看| 成人无码一区二区三区| 无码国产精品一区二区免费模式 | 一区二区三区免费高清视频| 国产成人综合精品一区| 色窝窝无码一区二区三区色欲|