我有一个变量swimlaneAttribute:
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
时,它就会阻止!!! {/ p>
swimlaneAttributes = GetSwimlaneAttribute();
如果我以这种方式通过,(我认为记录计数变为0)
//swimalneAttributes = GetSwimlaneAttribute as List<dynamic>;
那么如何将动态转换为列表
谢谢!
答案 0 :(得分:3)
您目前正在返回一系列匿名类型对象。该序列无法转换为List<T>
,因为不是<{1}} 。
您可以将声明更改为:
List<T>
没有更改代码正文 - 然后获取IEnumerable<dynamic> GetSwimlaneAttribute(...)
只需将其称为:
List<dynamic>
如果您绝对无法更改声明,则可以在方法之外转换它:
List<dynamic> list = GetSwimlaneAttribute(...).ToList();
或直接调用扩展方法:
IEnumerable<dynamic> sequence = GetSwimlaneAttribute(...);
List<dynamic> list = sequence.ToList();
但是,您应该知道匿名类型不会跨越程序集边界(没有一点hackery)。您应该强烈考虑为此创建名为的类型。
此外,您的方法体有点夸张 - 您声明一个变量并为其赋值为空值,然后立即指定一个不同的值,然后返回该值。整个事情可以写成:
List<dynamic> list = Enumerable.ToList<dynamic>(GetSwimlaneAttirbute(...));
答案 1 :(得分:1)
这个怎么样?
List<dynamic> lstDynamic = new List<dynamic>();
lstDynamic.Add(GetSwimlaneAttribute());
并使用lstDynamic。
答案 2 :(得分:0)
你为什么不试试这种方式?
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;
}