gpt4 book ai didi

c# - 通用对象的通用列表

转载 作者:IT王子 更新时间:2023-10-29 04:47:55 25 4
gpt4 key购买 nike

假设我有一个表示数据字段的对象,该对象需要以下属性:名称、类型、值、长度。这是对象:

class Field<T>
{
public string Name { get; set; }
public Type Type
{
get
{
return typeof(T);
}
}
public int Length { get; set; }
public T Value { get; set; }
}

我使用了泛型,因为我想强制代码的用户只能分配特定类型的值。
现在的问题是当我想创建一个字段列表时。
如果我创建像 List<Field<object>> 这样的列表然后我们可以将任何值分配给列表中的给定字段,当我们查询类型时,我们得到“对象”。
问题是——在那个列表上,我可能想要很少的字段包含字符串,很少的字段包含整数、日期,甚至自定义对象,而这些对象又会有一个字段列表...
泛型是解决此类问题的好方法吗?如果是,我将如何实现它?如果没有,什么是更好的方法?

---编辑---
只是为了添加更多背景:
1. 我可能想要一个字段列表,每个字段将包含不同的数据类型,如下所示:

List<Field<object>> lst = new List<Field<object>>();
lst.Add(new Field<string>());
lst.Add(new Field<int>());
lst.Add(new Field<SomeObjectFromMyApp>());

2。稍后我将不得不在一个循环中自动查询这些对象及其属性,就像这样:

foreach(Field<object> fld in lst)
{
Type t = fld.Type;
//do some other stuff
}

最佳答案

是的,泛型是一个不错的选择。实现类型安全(并使用 Type 属性识别类型)的关键是在列表和 Field<T> 类之间添加抽象。

Field<T>实现接口(interface) IField .此接口(interface)不需要任何成员。

然后将您的列表声明为 List<IField> .

这样你就可以限制列表只包含字段,但每个字段可以是不同的类型。

要稍后读取值,只需执行

foreach(var field in list)
{
var type = field.Type;
....
}

关于c# - 通用对象的通用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19490819/

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