作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我知道这可以使用 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/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!