这里的第一个问题。 我试图使用字段的类型来实例化泛型类。
public class ValueRange<type1>
{
type1 min;
type1 max;
}
void foo()
{
int k;
ValueRange<k.GetType()> range;
}
这不起作用。有什么建议吗? 提前致谢
答案 0 :(得分:8)
样本令人困惑。我怀疑你想要像
这样的东西Type genericType = typeof(ValueRange<>).MakeGenericType(k.GetType());
Activator.CreateInstance(genericType);
答案 1 :(得分:6)
需要编译时类型,如下所示:
ValueRange<int> range;
值得注意的是,您通常将您的类型命名为“T”;它只是普遍接受的标准(因此很好阅读)。
答案 2 :(得分:1)
您可以在运行时实例化该类型,但不能像处理那样声明变量。
Type genericType = typeof(ValueRange<>).MakeGenericType(k.GetType());
object instance = Activator.CreateInstance(genericType);
.NET 4.0在涉及泛型类型的协方差和逆变时有新的规则。这应该有助于更强烈地键入您的变量。
编辑:更改了示例代码以使用辅助变量genericType
以提高可读性。
答案 3 :(得分:1)
使其更清晰。在上面的示例中,ValueRange是我的类,而不是c#one。
我想知道是否有办法避免两次声明类型。
int k;
ValueType m;
在此声明中,类型“int”被声明两次。但在我看来,这似乎是多余的。例如,如果我想更改k的类型,我将不得不更改两个声明。我知道“Activator.CreateInstance”,但这对我来说并不好看!太复杂!!但如果没有更好的解决方案,我会坚持下去