【问题标题】:Initialize generic object with unknown type初始化具有未知类型的通用对象
【发布时间】:2023-04-03 11:04:01
【问题描述】:

如何初始化包含类型可以不同的通用对象的列表?

例如,我有以下内容:

this.Wheres = new List<Where<>>();

如您所知, 不是有效的语法。但是,有时传递给 Where 的类型是字符串,有时是 DateTime 等。我尝试使用 object 作为初始化类型,但这也不起作用。

【问题讨论】:

    标签: c# generics types


    【解决方案1】:
    this.Wheres = new List<Object>();
    

    【讨论】:

    • 这将添加(取消)装箱并删除类型安全性。
    • 如果列表可以由不同的对象类型组成,如何防止这种情况发生??
    • 这是执行 OP 要求的正确方法。是的,它不是类型安全的。这不是答案的错。
    【解决方案2】:

    好吧,你还没有真正给出足够的上下文(什么是 SqlWhere?),但通常你会使用类型参数:

    public class Foo<T>
    {
       private IList<T> wheres;
    
       public Foo()
       {
           wheres = new List<T>();
       }
    }
    

    但是,如果您希望单个集合包含多个不相关类型的值,则必须使用 List&lt;object&gt;

    【讨论】:

    • 谢谢!为了回答您的问题,查询生成器中的类在哪里。
    猜你喜欢
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    相关资源
    最近更新 更多