在C#2.0.net中使用Type.GetType(string),但使用类型或命名空间名称';t';找不到
我不知道如何纠正这个问题。我有在C#2.0.net中使用Type.GetType(string),但使用类型或命名空间名称';t';找不到,c#,.net,c#-2.0,castle,C#,.net,C# 2.0,Castle,我不知道如何纠正这个问题。我有 public void get_json(String TYPE) { Type t = Type.GetType("campusMap." + TYPE); t[] all_tag = ActiveRecordBase<t>.FindAll(); } 的 “t”不包含“id”的定义 这两个名称相同。不能将变量作为通用参数传入: t[] all_tag = ActiveRecordBase<t>.FindAll();
public void get_json(String TYPE)
{
Type t = Type.GetType("campusMap." + TYPE);
t[] all_tag = ActiveRecordBase<t>.FindAll();
}
的
“t”不包含“id”的定义
这两个名称相同。不能将变量作为通用参数传入:
t[] all_tag = ActiveRecordBase<t>.FindAll();
不能将变量作为泛型参数传入:
t[] all_tag = ActiveRecordBase<t>.FindAll();
你的程序表明了对C#如何工作的根本误解。编译程序之前,编译器必须知道all_标记的类型和类型参数的类型值;在程序运行之前(显然是在编译之后),您不会确定该类型
不能像这样将静态编译时类型与动态运行时类型混合使用。一旦你用反射做了一些事情,整个事情就必须用反射 您的程序表明对C#如何工作存在根本性误解。编译程序之前,编译器必须知道all_标记的类型和类型参数的类型值;在程序运行之前(显然是在编译之后),您不会确定该类型
不能像这样将静态编译时类型与动态运行时类型混合使用。一旦你用反射做了一些事情,整个事情就必须用反射 您能将类型选择委托给调用代码吗?您不能将运行时类型指定为泛型编译时类型,但如果您可以将类型选择委托给调用方,则可能能够完成所需的操作
public ??? get_json<T>() // seems like this should return something, not void
{
var collection = ActiveRecord<T>.FindAll();
// do something with the collection
}
public???get_json()//似乎应该返回一些内容,而不是void
{
var collection=ActiveRecord.FindAll();
//对这些收藏品做点什么
}
称为
get_json<CampusMap.Foo>();
get_json();
即使您在编译时不知道类型,也可以通过反射以这种方式调用,请参见。您能将类型的选择委托给调用代码吗?您不能将运行时类型指定为泛型编译时类型,但如果您可以将类型选择委托给调用方,则可能能够完成所需的操作
public ??? get_json<T>() // seems like this should return something, not void
{
var collection = ActiveRecord<T>.FindAll();
// do something with the collection
}
public???get_json()//似乎应该返回一些内容,而不是void
{
var collection=ActiveRecord.FindAll();
//对这些收藏品做点什么
}
称为
get_json<CampusMap.Foo>();
get_json();
即使您在编译时不知道类型,也可以通过反射以这种方式调用,请参见。可能重复的我不认为它是相同的。。但我可能错了。问题是一样的——尝试使用
类型
变量作为泛型类型参数,您的问题将由答案中的解决方案解决;具体来说,我不知道。。这个答案对你来说可能很清楚,但在这里,DigitWorld对我来说似乎更清楚为什么我要解决这个问题,只是不知道如何使用你指出的类型。这里的另一个问题是你使用泛型类型的方式,编译器必须提前知道它包含的成员。它找不到tag.id
,因为它不知道tag
的类型。另一个陷阱是MethodInfo method=t.GetMethod(“get_json_data”)中的t
需要是get\u json\u data
中声明的任何类型。您可能应该同时阅读反射和泛型。这是一个非常广泛的话题,但对于你想做的事情来说,对这两个话题都有清晰的理解是至关重要的。。但我可能错了。问题是一样的——尝试使用类型
变量作为泛型类型参数,您的问题将由答案中的解决方案解决;具体来说,我不知道。。这个答案对你来说可能很清楚,但在这里,DigitWorld对我来说似乎更清楚为什么我要解决这个问题,只是不知道如何使用你指出的类型。这里的另一个问题是你使用泛型类型的方式,编译器必须提前知道它包含的成员。它找不到tag.id
,因为它不知道tag
的类型。另一个陷阱是MethodInfo method=t.GetMethod(“get_json_data”)中的t
需要是get\u json\u data
中声明的任何类型。您可能应该同时阅读反射和泛型。这是一个非常广泛的话题,但对于你想做的事情来说,对这两个话题都有清晰的理解是至关重要的。我编辑了这个问题以反映可能的建议。tk“不能将变量作为泛型参数传入”完全正确。。。我最后做的是设置一个接口,然后让我需要调用的类类型从参数中继承。我编辑了这个问题以反映可能的建议。tk“不能将变量作为泛型参数传入”完全正确。。。我最后做的是设置一个接口,然后创建我需要从参数调用的类类型,它们继承自该类类型。不,我知道“knowen”是最棒的。。但这不是我们需要的。关键是,我必须在这里有一个动态的部分,或面35+复制粘贴相同的6行方法,我只改变。。。这似乎C#也必须有一个干净清晰的解决方案。我知道移动到3.5会提供动态类型,但我们不能这样做。开放的想法:我不明白,这是最好的是“知道”。。但这不是我们需要的。关键是,我必须在这里有一个动态的部分,或面35+复制粘贴相同的6行方法,我只改变。。。这似乎C#也必须有一个干净清晰的解决方案。我知道移动到3.5会提供动态类型,但我们不能这样做。思想开放:D
get_json<CampusMap.Foo>();