如何调用类型T的方法传递T作为字符串或"T"

val*_*ecx 1 c#

我有类似的东西

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)

这里的问题是我只能从使用此代码的地方获取学生作为字符串("学生")任何其他解决方案来做到这一点?

Kir*_*oll 6

在没有看到更多代码的情况下,很难确定您是否有合法的用例来调用这样的方法.但无论如何,假设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适用于此处(在许多情况下它将找不到您的自定义类型).