我有一个这种结构的类:
public class ClassName<T>
{
public int Id {get;set;}
public List<T> ObjectList { get; set; }
}
ClassName
的集合位于ParentClass
public ParentClass
{
public List<ClassName<T>> Property {Get;set;}
//Other properties...
}
要创建此类的实例,我将执行以下操作:
var item = new ClassName<string>();
是否可以在不指定T
类型的情况下创建此类的实例?
我尝试过
var item = new ClassName<null>();
var item = new ClassName();
但是显然这些都不起作用。...
答案 0 :(得分:5)
是否可以在不指定T类型的情况下创建此类的实例?
简而言之:不。
关于您为什么要这样做的评论:
因为并非该类的所有实例都需要此变量
我建议细分类别。
public class ClassNameBase
{
public int Id {get;set;}
}
public class ClassName<T> : ClassNameBase
{
public List<T> ObjectList { get; set; }
}
这样,您可以创建需要具有特定类型列表的对象。由于继承,它们还将具有基类提供的所有其他属性。
编辑:
如果要混合使用ObjectList
和不使用public ParentClass
{
public List<ClassNameBase> Property {Get;set;}
//Other properties...
}
的对象的不同情况,则可以创建基本类型的集合:
Property
现在所有不同的兄弟都将很好地融入同一列表ObjectList
。
如果要访问其中之一的ClassName<int> temp = Property[0] as ClassName<int>;
if(temp != null)
{
temp.ObjectList.Where(....
}
,则需要进行强制转换:
ThreadPoolExecutor
答案 1 :(得分:0)
之所以不能这样做,是因为如果不精确定义T类型,.NET如何知道如何初始化列表中对象的类型。
但是,仅供参考,您可以进行简单的继承,例如:
public static void Main(string[] args)
{
var c = new MyClass();
var d = new MyClass<long>();
}
class MyClass<T>
{
public List<T> ObjectList { get; set; }
}
class MyClass: MyClass<int>
{
}
使用上面的代码,当您编写new MyClass();
时,默认情况下它将以int
类型初始化列表。