我有类似的东西
public void FunctionName<T>(){
}
Run Code Online (Sandbox Code Playgroud)
并称之为你需要这样的东西
sub main(){
FunctionName<Integer>();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我可以将整数作为"整数"传递吗?
sub main(){
FunctionName<"Integer">();
}
Run Code Online (Sandbox Code Playgroud)
或者还有其他方法
好的,这是我的实际代码
private static T Convert<T>(DataRow row) where T : new()
{
T model = new T();
Type modelType = model.GetType();
FieldInfo[] fields = null;
FieldInfo field = default(FieldInfo);
Type fieldType = null;
string fieldName = null;
fields = modelType.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static);
foreach ( field in fields) {
fieldType = field.FieldType;
fieldName = field.Name.Replace("_", string.Empty);
Interaction.CallByName(model, fieldName, Microsoft.VisualBasic.CallType.Set, GetValue(row, fieldName, fieldType.Name));
}
return model;
}
static void main(){
Student s;
s = Convert<Student>(DatabaseRow);
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是我只能从使用此代码的地方获取学生作为字符串("学生")任何其他解决方案来做到这一点?
在没有看到更多代码的情况下,很难确定您是否有合法的用例来调用这样的方法.但无论如何,假设FunctionName包含在类中Foo,那么您可以使用反射调用该方法:
var foo = new Foo();
var typeName = "System.Int32";
var method = typeof(Foo).GetMethod("FunctionName");
var genericMethod = method.MakeGenericMethod(Type.GetType(typeName));
genericMethod.Invoke(foo, new Type[0]);
Run Code Online (Sandbox Code Playgroud)
请注意,我们无法使用,Integer因为那不是真正的类型名称.(它是int或者Int32在C#中,但只是Int32合法的,GetType因为它int被编入了编译器)此外,关于获取类型的所有常见警告都Type.GetType适用于此处(在许多情况下它将找不到您的自定义类型).
| 归档时间: |
|
| 查看次数: |
748 次 |
| 最近记录: |