首页 > 解决方案 > 在 C# 中可以用另一个列表对象替换列表对象

问题描述

var newListObject =  new List<object>();
    
if(a) 
{
    newListObject = new List<AnnualObject>();
} 
else 
{
    newListObject = new List<MonthlyObject>();
}

标签: c#

解决方案


是的,这样做很容易 - 您需要放弃编译时类型安全,因此通过切换到dynamic或非泛型IEnumerable/IList 为您的变量类型。

dynamic newListObject = new List<object>();

if (a)
{
    newListObject = new List<AnnualObject>();
}
else
{
    newListObject = new List<MonthlyObject>();
}

newListObject.Add(a ? new AnnualObject() : new MonthlyObject());
Console.WriteLine(newListObject[0]);

请注意,通常它不是其他任何人都可以查看或修改的代码的解决方案。如果您需要使用直接允许您执行此操作的语言(如 JavaScript)跳过类型安全,可能会更好。

对于 C#,可能会使用基类项列表或单独列表,但保留编译时类型安全。


推荐阅读