如何将动态转换为列表<dynamic> </dynamic>

时间:2014-10-13 05:38:02

标签: c# asp.net dynamic

我有一个变量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>;

那么如何将动态转换为列表

谢谢!

3 个答案:

答案 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;
}