c# - 混合字符串和 int 类型的列表

标签 c#

<分区>

我想要一个泛型类型的列表(实际上我只需要字符串和整数)。两个对象都有名称(字符串)但值不同(整数或字符串)

public class Setting
{    
    public string Name { get; set; }   
}

public class Setting<T> : Setting
{
    public T Value { get; set; }

    public Type Type
    {
        get
        {
            return typeof(T);
        }
    }    
}

名单如下:

List<Setting> list = new List<Setting>();
list.Add(new Setting<int> { Name = "one", Value = 10 } );
list.Add(new Setting<string> { Name = "two", Value = "string value" });

但是,当我尝试获取该值时,它不存在。

list[0].Value ????

这可以做到吗?

编辑:

令人惊讶的是它是如此简单(与泛型、接口(interface)相比),感谢@Patrick Hofman 的“对象”提示。

    public class Settings
    {
        public string Name { get; set; }
        public object Value { get; set; }
    }

Fields = new List<Settings>{
                        new Settings { Name = "Three", Value = "Three_value" },
                        new Settings{ Name = "Four", Value = 22 },
                        new Settings { Name = "Two", Value = "22" }
                    }

像魅力一样工作。

最佳答案

这不是最优雅的解决方案,但它会起作用:

public class Setting
{

    public string Name { get; set; }

    public object Value { get; protected set; }
}

public class Setting<T> : Setting
{
    public new T Value { get { return (T)base.Value; } set { base.Value = value; } }

    public Type Type
    {
        get
        {
            return typeof(T);
        }
    }
}

实际上,您是将值存储在基类中,然后将其转换为派生类。

我建议检查你的设计,看看你是否真的需要泛型。如图所示,这违背了泛型的目的。

关于c# - 混合字符串和 int 类型的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53175514/

相关文章:

c# - 通过 GUI 查询工作正常,但在尝试通过 Dapper 运行时返回一般错误

c# - 嵌套列表上的 Linq C#

c# - 线程上下文和同步上下文

c# - WPF ComboBox IsSynchronised 默认值

c# - Web 应用程序中的异步等待性能

c# - 手动更新 Entity Framework 中集合的修改状态

c# - JSON.NET - 条件类型反序列化

c# - 如何清除 MassTransit 队列?

c# - 您如何右键单击,将目标另存为使用 WatiN?

c# - 为什么运算符 '==' 不能应用于结构和默认值(结构)?