C# 将值指定给返回never null的属性
我有一处房产C# 将值指定给返回never null的属性,c#,properties,C#,Properties,我有一处房产 public static List<int> intItems { get { return _intItems ?? new List<int>(); } set { _intItems = value; } } private static List<int> _intItems; 为了实现这一点,我必须首先将值分配给private字段,以启用引用访问: public static List<int> intI
public static List<int> intItems
{
get { return _intItems ?? new List<int>(); }
set { _intItems = value; }
}
private static List<int> _intItems;
为了实现这一点,我必须首先将值分配给private字段,以启用引用访问:
public static List<int> intItems
{
get
{
if (_intItems == null)
{
_intItems = new List<int>();
}
return _intItems;
}
set { _intItems = value; }
}
公共静态列表初始化项
{
得到
{
如果(_initItems==null)
{
_intItems=新列表();
}
返回初始项;
}
设置{u inititems=value;}
}
我的问题是,有没有比一个有12行代码的属性更优雅的方法?我有多个这样的属性。延迟加载属性的正常模式是:
private static List<int> _intItems;
public static List<int> IntItems
{
get => _intItems ?? (_intItems = new List<int>());
set => _intItems = value;
}
private static List\u inities;
公共静态列表项
{
get=>\u inititems???(\u inititems=new List());
set=>\u inititems=value;
}
如果您的要求是阻止人们将属性设置为null,同时仍然允许人们设置它,那么通常的方法是抛出异常:
private static List<int> _intItems = new List<int>();
public static List<int> IntItems
{
get => _intItems;
set => _intItems = value ?? throw new ArgumentNullException();
}
private static List _inititems=new List();
公共静态列表项
{
get=>\u初始化项;
set=>_initItems=value??抛出新的ArgumentNullException();
}
但是,如果您的要求只是您的属性从不返回null,那么为什么不这样做:
public static List<int> IntItems { get; } = new List<int>();
publicstaticlist inititems{get;}=newlist();
延迟加载属性的正常模式是:
private static List<int> _intItems;
public static List<int> IntItems
{
get => _intItems ?? (_intItems = new List<int>());
set => _intItems = value;
}
private static List\u inities;
公共静态列表项
{
get=>\u inititems???(\u inititems=new List());
set=>\u inititems=value;
}
如果您的要求是阻止人们将属性设置为null,同时仍然允许人们设置它,那么通常的方法是抛出异常:
private static List<int> _intItems = new List<int>();
public static List<int> IntItems
{
get => _intItems;
set => _intItems = value ?? throw new ArgumentNullException();
}
private static List _inititems=new List();
公共静态列表项
{
get=>\u初始化项;
set=>_initItems=value??抛出新的ArgumentNullException();
}
但是,如果您的要求只是您的属性从不返回null,那么为什么不这样做:
public static List<int> IntItems { get; } = new List<int>();
publicstaticlist inititems{get;}=newlist();
作为canton7答案的替代方案,您可以在设置中检查空值
:
private static List<int> _intItems = new List<int>();
public static List<int> intItems {
get { return _intItems; }
set { _intItems = value ?? new List<int>(); }
}
private static List _inititems=new List();
公共静态列表项{
获取{return\u inititems;}
设置{u initItems=value??新列表();}
}
作为canton7答案的替代方案,您可以在设置中检查空值
:
private static List<int> _intItems = new List<int>();
public static List<int> intItems {
get { return _intItems; }
set { _intItems = value ?? new List<int>(); }
}
private static List _inititems=new List();
公共静态列表项{
获取{return\u inititems;}
设置{u initItems=value??新列表();}
}
@Rango我知道,我也找到了一个解决方案,但它应该是更少的代码,甚至是一种不同的方法。需求是一个永不返回的列表
null@Rango我知道,我也找到了一个解决方案,但它应该是更少的代码,甚至是一种不同的方法。需求是一个列表
,它从不返回null。第二种方法禁用IntItems=GetIntegers(foo)代码>是的。这可能是你想要的,也可能不是你想要的——你只是想要一个“一个永远不可能为空的属性”,所以很难知道你的实际需求是什么。这就是为什么我先发布了更准确的版本。请记住,您可以执行IntItems.AddRange(GetIntegers(foo))
。第二种方法禁用IntItems=GetIntegers(foo)代码>是的。这可能是你想要的,也可能不是你想要的——你只是想要一个“一个永远不可能为空的属性”,所以很难知道你的实际需求是什么。这就是为什么我先发布了更准确的版本。请记住,您可以执行IntItems.AddRange(GetIntegers(foo))
。