【问题标题】:How to create a parameter class with variant value如何创建具有变量值的参数类
【发布时间】:2013-08-24 12:04:04
【问题描述】:

我想创建一个 params 集合。使用泛型创建集合非常简单:

List<Param> Params = new List<Param>();

我可以像这样简单地添加参数:

List<Param> Params = new List<Param>() {
    new Param() { Label = "Param 1", Type = Param.ParamType.Text },
    new Param() { Label = "Param 2", Type = Param.ParamType.Select }
}

现在,如何为每个参数添加类型值属性?

喜欢:

  • 文本字符串
  • 选择的选项列表
  • 日期,布尔值……

我认为有这样更好的解决方案:

new Param() { Label = "Param 1", Type = Param.ParamType.Text, StringValue = "text" },
new Param() { Label = "Param 1", Type = Param.ParamType.Text, StringValue = "text" },
new Param() { Label = "Param 1", Type = Param.ParamType.CheckBox, BoolValue = true }

【问题讨论】:

    标签: c# .net generics properties


    【解决方案1】:

    我建议创建一个通用子类:

    public Param<T> : Param
    {
        public T Value { get; set; }
    }
    

    然后像这样创建它们:

    new Param<string>() { Label = "Param 1", Type = Param.ParamType.Text, Value = "text" },
    new Param<string>() { Label = "Param 1", Type = Param.ParamType.Text, Value = "text" },
    new Param<bool>() { Label = "Param 1", Type = Param.ParamType.CheckBox, Value = true }
    

    您可以利用类型推断在Param 上创建更方便的静态方法:

    public class Param 
    {
        ...
        public static Param<T> From<T>(string label, ParamType type, T value)
        {
            return new Param<T>() 
            {
                Label = label, 
                Type = type, 
                Value = value 
            }
        }
    }
    

    然后像这样使用它:

    Param.From("Param 1", Param.ParamType.Text, "text"),
    Param.From("Param 1", Param.ParamType.Text, "text"),
    Param.From("Param 1", Param.ParamType.CheckBox, true)
    

    【讨论】:

    • 但是这样你不能创建List&lt;Param&gt;
    • @Alberto 当然可以。 Param 是非泛型基类型。 new List&lt;Param&gt; { new Param&lt;string&gt; (...) } 可以正常工作,因为 Param&lt;string&gt;Param 的子类。
    猜你喜欢
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 2019-03-16
    相关资源
    最近更新 更多