C# 更安全的方法做动态列表?(动态类型.NET 4.0)

C# 更安全的方法做动态列表?(动态类型.NET 4.0),c#,list,dynamic,properties,C#,List,Dynamic,Properties,我试图用不同类型的对象(或其他可枚举/索引类型)创建一个列表。我没有在类上创建自己的枚举器,所以我在谷歌上搜索的次数越来越多 现在我带着(可能)一个最糟糕的想法来到这里 public List<dynamic> IndexedProperties { get { // some code // returned list (I wrote only types) r

我试图用不同类型的对象(或其他可枚举/索引类型)创建一个列表。我没有在类上创建自己的枚举器,所以我在谷歌上搜索的次数越来越多

现在我带着(可能)一个最糟糕的想法来到这里

    public List<dynamic> IndexedProperties
    {
        get
        {
            // some code
            // returned list (I wrote only types)
            return new List<dynamic> { String, String, String, DateTime, DateTime, String };
        }
    }
所以,准确地说,这是一个好方法吗?(我认为使用dynamic一点也不好,只在危急情况下使用)
我可以更安全地执行此操作吗?

如果您对列表成员所做的所有操作都是显示一个字符串,那么您可以使用:

public List<object> IndexedProperties = new List<object>();
...
foreach(var prop in data.IndexedProperties)
    Console.WriteLine(prop.ToString());
然后,在您的列表中,构造函数将类似于:

public List<DynamicContainer> IndexedProperties
{
    get
    {
        return new List<DynamicContainer> 
        {
            new DynamicContainer(stringObject1),
            new DynamicContainer(stringObject2),
            new DynamicContainer(stringObject3),
            new DynamicContainer(dateTimeObject1),
            new DynamicContainer(dateTimeObject2),
            new DynamicContainer(stringObject4)
        };
    }
}

...

 foreach(var prop in data.IndexedProperties)
    Console.WriteLine(prop.ValueMember.ToString());
公共列表索引属性
{
得到
{
返回新列表
{
新的DynamicContainer(stringObject1),
新的DynamicContainer(stringObject2),
新的DynamicContainer(stringObject3),
新的DynamicContainer(dateTimeObject1),
新的DynamicContainer(dateTimeObject2),
新的DynamicContainer(stringObject4)
};
}
}
...
foreach(data.IndexedProperties中的var属性)
Console.WriteLine(prop.ValueMember.ToString());

您知道列表的大小吗(或者它不是固定的)?然后您可以返回项的
元组
。对于您的使用示例,您根本不需要
动态
。只要一个非类型化对象列表
list
就足够了
dynamic
适用于具有未知/可变成员和类型的对象,如果您不知道确切的类型,您可以始终使用基类(
object
)。哇。。。我不知道元组类。。。谢谢我一直认为对象列表只能存储相同类型的对象。。。多好的shame@BartłomiejSobieszek一个派生对象列表,所有对象都派生自System.Object。对于值类型(例如DateTime),效率非常低,但是。。。
public class DynamicContainer
{
    public dynamic ValueMember{ get; set; }
    public item(dynamic valueMember)
    {
        this.ValueMember = valueMember;
    }
}
public List<DynamicContainer> IndexedProperties
{
    get
    {
        return new List<DynamicContainer> 
        {
            new DynamicContainer(stringObject1),
            new DynamicContainer(stringObject2),
            new DynamicContainer(stringObject3),
            new DynamicContainer(dateTimeObject1),
            new DynamicContainer(dateTimeObject2),
            new DynamicContainer(stringObject4)
        };
    }
}

...

 foreach(var prop in data.IndexedProperties)
    Console.WriteLine(prop.ValueMember.ToString());