List 属性 的 C# 快捷方式,它永远不应该 return null
C# shortcut for a List property that should never return null
为了确保列表 属性 永远不会 return null,我这样声明:
private IList<Item> _myList;
[NotNull]
public IList<Item> MyList
{
get { return _myList ?? new List<Item>(); }
set { _myList = value; }
}
这行得通,但我讨厌语法。考虑到我应该在我的项目中广泛使用这种技术,我正在寻找一种更好的方法来编写这个或更好的解决同一问题的方法。有什么想法吗?
从 C# 6.0 开始,您可以初始化使用自动实现字段的属性。这将确保 MyList 永远不会是空值:
public IList<Item> MyList { get; set; } = new List<Item>();
This works, but I hate the syntax.
我讨厌返回新列表并立即删除它是个好主意。我觉得你应该想办法解决这个问题
返回值真的不可为空吗?如果是这样,请创建一个正确的实例,而不是在创建它的那一刻就将其丢弃:
[NotNull]
public IList<Item> MyList
{
get { return _myList ?? (_myList = new List<Item>()); }
set { _myList = value; }
}
如果您可以使用可为空的列表,您可能只想shorthand 空检查:
if (list?.Contains(...) ?? false)
{ }
这是个好方法,但每次需要 MyList
且 _myList
为空时,您将创建一个新的空列表...所以如果 _myList
为空有人做了 MyList.Add(item);
它不会被添加到正确的列表中。
最好这样做:
private IList<Item> _myList;
[NotNull]
public IList<Item> MyList
{
get { return _myList ?? (_myList = new List<Item>()); }
set { _myList = value; }
}
这样,第一次 _myList
为空时,您创建一个新列表。那么,_myList
将不会为空。
为了确保列表 属性 永远不会 return null,我这样声明:
private IList<Item> _myList;
[NotNull]
public IList<Item> MyList
{
get { return _myList ?? new List<Item>(); }
set { _myList = value; }
}
这行得通,但我讨厌语法。考虑到我应该在我的项目中广泛使用这种技术,我正在寻找一种更好的方法来编写这个或更好的解决同一问题的方法。有什么想法吗?
从 C# 6.0 开始,您可以初始化使用自动实现字段的属性。这将确保 MyList 永远不会是空值:
public IList<Item> MyList { get; set; } = new List<Item>();
This works, but I hate the syntax.
我讨厌返回新列表并立即删除它是个好主意。我觉得你应该想办法解决这个问题
返回值真的不可为空吗?如果是这样,请创建一个正确的实例,而不是在创建它的那一刻就将其丢弃:
[NotNull]
public IList<Item> MyList
{
get { return _myList ?? (_myList = new List<Item>()); }
set { _myList = value; }
}
如果您可以使用可为空的列表,您可能只想shorthand 空检查:
if (list?.Contains(...) ?? false)
{ }
这是个好方法,但每次需要 MyList
且 _myList
为空时,您将创建一个新的空列表...所以如果 _myList
为空有人做了 MyList.Add(item);
它不会被添加到正确的列表中。
最好这样做:
private IList<Item> _myList;
[NotNull]
public IList<Item> MyList
{
get { return _myList ?? (_myList = new List<Item>()); }
set { _myList = value; }
}
这样,第一次 _myList
为空时,您创建一个新列表。那么,_myList
将不会为空。