当前位置:  开发笔记 > 编程语言 > 正文

LINQ如何定义与ElementAtOrDefault运算符一起使用的默认类型

如何解决《LINQ如何定义与ElementAtOrDefault运算符一起使用的默认类型》经验,为你挑选了1个好方法。

我非常喜欢这个ElementAtOrDefaultOperator的声音用于通用列表,但我无法弄清楚如何为我的对象列表定义默认类型.根据我的理解,如果我有一个如下所示的对象列表,则defaultvalue将为null,但我想返回具有适当值的默认对象的自己版本.这就是我的意思:

ClassA {

string fieldA;
string fieldB;
ClassB fieldC;

//constructor

}

List myObjects = new List();

myObjects.Add( //new object )
myObjects.Add( //new object )

所以我希望能够做到以下几点:

ClassA newObject = myObjects.ElementAtOrDefault(3);

并且newObject是我在某处定义的默认类型ClassA.我以为可能有一个SetDefaultElement或其他一些方法,但我认为它不存在.

有什么想法吗?



1> Marc Gravell..:

只需编写自己的扩展方法:

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 {...}); 

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有