我非常喜欢这个ElementAtOrDefaultOperator的声音用于通用列表,但我无法弄清楚如何为我的对象列表定义默认类型.根据我的理解,如果我有一个如下所示的对象列表,则defaultvalue将为null,但我想返回具有适当值的默认对象的自己版本.这就是我的意思:
ClassA { string fieldA; string fieldB; ClassB fieldC; //constructor } ListmyObjects = new List (); myObjects.Add( //new object ) myObjects.Add( //new object )
所以我希望能够做到以下几点:
ClassA newObject = myObjects.ElementAtOrDefault(3);
并且newObject是我在某处定义的默认类型ClassA.我以为可能有一个SetDefaultElement或其他一些方法,但我认为它不存在.
有什么想法吗?
只需编写自己的扩展方法:
static T ElementAtOrDefault(this IList list, int index, T @default) { return index >= 0 && index < list.Count ? list[index] : @default; }
并致电:
var item = myObjects.ElementAtOrDefault(3, defaultItem);
或者,如果您希望懒惰地评估默认值,请使用Func
默认值:
static T ElementAtOrDefault(this IList list, int index, Func @default) { return index >= 0 && index < list.Count ? list[index] : @default(); }
例如,此表单允许您使用预定义的项目(例如,第一个):
var item = myObjects.ElementAtOrDefault(3, myObjects.First);
或更灵活:
var item = myObjects.ElementAtOrDefault(3, () => myObjects[2]);
要么
var item = myObjects.ElementAtOrDefault(3, () => new MyObject {...});