Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将值指定给返回never null的属性_C#_Properties - Fatal编程技术网

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))