Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#2.0.net中使用Type.GetType(string),但使用类型或命名空间名称';t';找不到_C#_.net_C# 2.0_Castle - Fatal编程技术网

在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>();