我有一个列表,我希望通过调用来确定类型,例如在我希望类似的类中
public class ClassName
{
public ListType<T> ListName { get; set; }
// other class items
}
然后用法设置类类型
var className = new ClassName()
{
ListType<int> = data
};
所以基本上就是我想要的,我让它使用动态,所以类是
public class ClassName
{
public ListType<dynamic> ListName { get; set; }
// other class items
}
,电话是
var className = new ClassName()
{
ListType<dynamic> = data
};
这有效,但我想知道是否有更好的方法来做到这一点,所以我不必使用动态
哦,差点忘了提到ListType是public class ListType<T> : List<T>
{
}
因为传递不同的类型而失败
感谢
编辑: 意识到我对堆栈溢出的代码的使用与我的代码不同
ListType有一个构造函数,它带有3个参数,因此用法更多
var className = new ClassName()
{
ListName = new ListType<Type>(x, y, z)
}
答案 0 :(得分:3)
怎么样
public class ClassName<T>
{
public ListType<T> ListName { get; set; }
// other class items
}
然后像这样使用它:
var className = new ClassName<int>()
{
ListName = data;
};
答案 1 :(得分:1)
Bertrand的回答略有补充,为您提供了一种不在特定用例中重复类型参数的方法,甚至不提及它:
public static class ClassName
{
public static ClassName<T> Create<T>(ListType<T> list)
{
return new ClassName<T> { ListName = list };
}
public static ClassName<T> Create<T>(params T[] list)
{
return new ClassName<T> { ListName = new ListType<T>(list) };
}
}
使用第一种方法,您可以编写类似
的内容ClassName.Create(new ListType<SomeType>(x, y, z));
使用第二种方法,你甚至可以写
ClassName.Create(x, y, z);
让编译器确定T
是SomeType
,但这并不总是有效。
请注意,ClassName
与ClassName<T>
不同,您可能希望以不同方式命名,例如ClassNameFactory
。