gpt4 book ai didi

c# - 如何告诉 C# 在对象的基类中查找属性?

转载 作者:太空宇宙 更新时间:2023-11-03 17:09:29 25 4
gpt4 key购买 nike

我在下面的指定行中收到错误“T 不包含 Id 的定义”,即使在我调试时,我看到“item”确实存在 在其基类 中有一个属性“Id”。

我如何在此处指定我希望 C# 在项目的基类中查找 Id(为什么它不自动执行此操作?)?

//public abstract class Items<T> : ItemBase (causes same error)
public abstract class Items<T> where T : ItemBase
{
public List<T> _collection = new List<T>();
public List<T> Collection
{
get
{
return _collection;
}
}

public int GetNextId()
{
int highestId = 0;
foreach (T item in _collection)
{
//ERROR: "T does not contain a definition for Id
if (item.Id > highestId) highestId = item.Id;
}

return highestId;
}

}

类的定义如下:

public class SmartForm : Item
{
public string IdCode { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public int LabelWidth { get; set; }
public int FormWidth { get; set; }
...


public abstract class Item : ItemBase
{
public int Id { get; set; }
public DateTime WhenCreated { get; set; }
public string ItemOwner { get; set; }
public string PublishStatus { get; set; }
public int CorrectionOfId { get; set; }
...

最佳答案

你的问题是 T 没有约束,所以,在编译时,编译器只知道 T 是某种对象。如果您知道 T 将始终继承哪种类型,则可以向类定义添加泛型约束:

public abstract class Items<T> : ItemBase where T : Item
{
//....
}

当您调试时,T 被实例化为具有 Id 属性的 Item(或其子类),但编译器在编译时不知道这一点,因此会出现错误。

关于c# - 如何告诉 C# 在对象的基类中查找属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1108565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com