它';在C#中,用另一个列表对象替换列表对象是可能的 var newListObject=newlist(); 如果(a) { newListObject=新列表(); } 其他的 { newListObject=新列表(); }

它';在C#中,用另一个列表对象替换列表对象是可能的 var newListObject=newlist(); 如果(a) { newListObject=新列表(); } 其他的 { newListObject=新列表(); },c#,C#,是的,这很容易做到-您需要放弃编译时类型安全性,因此可以切换到变量类型的动态或非泛型IEnumerable/IList var newListObject = new List<object>(); if(a) { newListObject = new List<AnnualObject>(); } else { newListObject = new List<MonthlyObject>(); } dynamic ne

是的,这很容易做到-您需要放弃编译时类型安全性,因此可以切换到变量类型的
动态
或非泛型
IEnumerable
/
IList

var newListObject =  new List<object>();
    
if(a) 
{
    newListObject = new List<AnnualObject>();
} 
else 
{
    newListObject = new List<MonthlyObject>();
}
dynamic newListObject=newlist();
如果(a)
{
newListObject=新列表();
}
其他的
{
newListObject=新列表();
}
添加(一个?新的AnnualObject():新的MonthlyObject());
Console.WriteLine(newListObject[0]);
请注意,一般来说,它不是任何其他人都可以查看或修改的代码解决方案。若您需要使用直接允许您这样做的语言(如JavaScript)跳过类型安全性,那个就更好了


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

如果类的属性没有重叠,那么您的实现有意义吗?接下来发生的任何事情都需要假设这两个类在其实现中有一些重叠,如果是这种情况,那么您应该提取和接口并将其用作newListObject的类型,并在if中实例化它。关于链接的问题:请注意,C#中的所有对象都是从
对象
派生的,因此,
object
AnnualObject
MonthlyObject
的基类。。。。经过编辑后,我对这个问题的理解非常不同。。。但是@John很可能是对的,与我作为答案发布的方法相比,duplicate实际上是答案。我唯一想到的另一件事是,假设
AnnualObject
MonthlyObject
只在它们所代表的时间段上有所不同,也许你可以将时间段作为一个公共对象的属性,而不是按周期定义对象本身。@John根据需要-
dynamic
让一个人编写代码,就好像它有类型
newListObject[0]。Month
直接(在运行时以花哨的反射为代价)而不是显式地在代码中强制转换。。。但实际上,没有人关心代码的作者写什么纯粹是为了他们自己的消费,只要他们不要求别人看代码(即通过在SO:)这是一个很好的观点。:)我没有考虑实际访问这些项目本身。
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]);