gpt4 book ai didi

类的 C# 可选数组参数

转载 作者:可可西里 更新时间:2023-11-01 07:49:20 25 4
gpt4 key购买 nike

我知道这可以使用 null 来完成,所以我有一个解决方法,但我想知道是否有更好的方法让我可以有一个可选的 int[] 一个类的参数?

class PriceLevels
{
public int[] priceLevels { get; }
private readonly int[] defaultPriceLevels = { 2, 3, 3, 4, 5, 6 };

public PriceLevels(int[] newPriceLevels = defaultPriceLevels)
{
priceLevels = newPriceLevels;
}
}

这给了我一个错误,说它是一个无效的表达式 defaultPriceLevels 必须是常量。我该如何解决这个问题?

我能想到的一个解决方法是这个,但我不太喜欢这个解决方案

class PriceLevels
{
public int[] priceLevels { get; }
private readonly int[] defaultPriceLevels = { 2, 3, 3, 4, 5, 6 };

public PriceLevels(int[] newPriceLevels = null)
{
if(newPriceLevels == null)
priceLevels = defaultPriceLevels;
else
priceLevels = newPriceLevels;
}
}

最佳答案

一个更好的设计是让 2 个构造函数 ( constructor overload ) 一个得到 int[] 的构造函数另一个没有:

class PriceLevels
{
public int[] priceLevels { get; set; }
private readonly int[] defaultPriceLevels = { 2, 3, 3, 4, 5, 6 };

public PriceLevels()
{
priceLevels = defaultPriceLevels;
}

public PriceLevels(int[] newPriceLevels)
{
priceLevels = newPriceLevels;
}
}

如果不是,不知道我是否称其为“更好”,但您可以使用 params keyword :

class PriceLevels
{
public int[] priceLevels { get; set; }
private readonly int[] defaultPriceLevels = { 2, 3, 3, 4, 5, 6 };

public PriceLevels(params int[] newPriceLevels)
{
priceLevels = newPriceLevels.Length == 0 ? defaultPriceLevels : newPriceLevels;
}
}

此外,根据设计,我不相信它是 PriceLevels决定默认值是什么的责任,也许在任何情况下都应该将其作为依赖项 - 参见 SOLID Dependency Injection 。那么你将只有 1 个构造函数:

class PriceLevels
{
public int[] priceLevels { get; set; }

public PriceLevels(int[] newPriceLevels)
{
priceLevels = newPriceLevels;
}
}

关于类的 C# 可选数组参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39971222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com