如何将动态转换为列表<;动态>;
本文关键字:动态 gt lt 列表 转换 | 更新日期: 2023-09-27 18:26:16
我有一个变量泳道属性:
List<dynamic> swimlaneAttributes = new List<dynamic>();
但在一个函数中,我有一个返回类型的动态
public dynamic GetSwimlaneAttribute(List<ProjectSwimlaneAttribute> swimlaneAttributeTable, Dictionary<string, string> dic)
{
dynamic swimlaneAttributes = null;
swimlaneAttributes = swimlaneAttributeTable.Select(s => new
{
ID = s.Id,
DataType = s.AttributeDataType,
IsCriticalField = s.IsCriticalField,
});
return swimlaneAttributes;
}
这将从我正在传递的表参数中返回一些记录!!
现在我必须调用这个GetSwimlaneAttribute
函数,作为回报,我将获得所有必需的记录(从表中)但当我把这个传给swimlaneAttributes
时,它就去抓块了!!!
swimlaneAttributes = GetSwimlaneAttribute();
如果我这样通过,(我认为记录计数变为0)
//swimalneAttributes = GetSwimlaneAttribute as List<dynamic>;
那么如何将动态转换为列表
谢谢!
您当前正在返回一系列匿名类型的对象。该序列不能强制转换为List<T>
,因为它不是List<T>
。
您可以将声明更改为:
IEnumerable<dynamic> GetSwimlaneAttribute(...)
在不对代码主体进行更改的情况下,要获得List<dynamic>
,只需将其称为:
List<dynamic> list = GetSwimlaneAttribute(...).ToList();
如果你绝对不能更改声明,你可以在方法之外进行转换:
IEnumerable<dynamic> sequence = GetSwimlaneAttribute(...);
List<dynamic> list = sequence.ToList();
或者直接调用扩展方法:
List<dynamic> list = Enumerable.ToList<dynamic>(GetSwimlaneAttirbute(...));
但是,您应该注意,匿名类型不会跨越程序集边界(没有一点技巧)。您应该强烈考虑为此创建一个名为的类型。
此外,您的方法体有点粗糙——您声明一个变量并为其分配一个null值,然后立即分配一个不同的值,然后只返回该值。整个事情可以写成:
return swimlaneAttributeTable.Select(s => new
{
ID = s.Id,
DataType = s.AttributeDataType,
IsCriticalField = s.IsCriticalField,
});
这个怎么样?
List<dynamic> lstDynamic = new List<dynamic>();
lstDynamic.Add(GetSwimlaneAttribute());
并使用lstDynamic。
为什么不试试这种方法?
public List<dynamic> GetSwimlaneAttribute(List<ProjectSwimlaneAttribute> swimlaneAttributeTable, Dictionary<string, string> dic)
{
List<dynamic> swimlaneAttributes = new List<dynamic>(); // modified dynamic to List<dynamic>
swimlaneAttributes = swimlaneAttributeTable.Select(s => new
{
ID = s.Id,
DataType = s.AttributeDataType,
IsCriticalField = s.IsCriticalField,
});
return swimlaneAttributes;
}