【发布时间】:2019-03-08 20:16:09
【问题描述】:
基于这个话题:C# - Multiple generic types in one list
请考虑以下代码:
public abstract class Metadata
{
}
public class Metadata<T> : Metadata
{
public string Name {set; get;}
}
public class MetaDataCollection
{
public void DoSomeThing()
{
List<Metadata> metadataObjects = new List<Metadata>
{
new Metadata<int>() { Name = "Name 1"},
new Metadata<bool>() { Name = "Name 2"},
new Metadata<double>() { Name = "Name 3"},
};
foreach(vat item in metadataObjects)
{
item.Name ??????
}
}
}
在上面的代码中,我如何访问Name 属性?
谢谢
编辑 1)
感谢@BWA。但我有一个通用属性:
public class Metadata<T> : Metadata
{
public override string Name {set; get;}
public List<T> Some {set; get;} <-----
}
我不能在基本抽象类中声明它。对于那个属性,我能做什么?
【问题讨论】:
-
将该属性拉到
Metadata并让Metadata<T>继承它。或者将Metadata转换为具有Name属性的接口。现在,Metadata和Metadata<T>无关 -
你不能,因为
Metadata没有那个属性。与其向multiple (duplicate) questions 询问同样的问题,不如尝试正确解释您正在尝试做的事情。 -
顺便说一句,这与 C# 7 或泛型无关,它只是继承
-
@Arian 如果您可以发布单独的问题而不是将您的问题合并为一个问题,则最好。这样,它可以帮助人们回答您的问题,也可以帮助其他人至少寻找您的一个问题。谢谢!
标签: c#