可替换类型的 C# 列表

本文关键字:列表 类型 可替换 | 更新日期: 2023-09-27 17:55:58

我有以下结构:

awesomeItemBase
+ int a
+ int b
awesomeItemSpecial1: awesomeItemBase
+ int c
+ string s
..etc
awesomeItemSpecial2: awesomeItemBase
+ int d
+ string t
..etc

假设我想通过将它们包装在一个通用类型中来创建这两个派生类的列表,以便每个列表项都包含 int a、int b 的信息接口不能有字段。

我该怎么做?

可替换类型的 C# 列表

如果我

正确理解您的问题,您可以这样做:

public class AwesomeItemBase {
    // you could also make these fields
    public int A {get; set;}
    public int B {get; set;}
}
public class AwesomeItemSpecial1 : AwesomeItemBase {
    // additional fields and properties
}
public class AwesomeItemSpecial2 : AwesomeItemBase {
    // additional fields and properties
}

然后,您将能够:

var foo = new AwesomeItemSpecial1();
foo.A = 42;
foo.B = -1;
var bar = new AwesomeItemSpecial2();
bar.A = 3;
bar.B = 59;
var awesomeList = new List<AwesomeItemBase>();
awesomeList.Add(foo);
awesomeList.Add(bar);
foreach (var item in awesomeList) {
    Console.WriteLine("A = {0}, B = {1}", item.A, item.B);
}
// output is:
// A = 42, B = -1
// A = 3, B = 59