C# 如何将字符串类名作为类传递或处理

C# 如何将字符串类名作为类传递或处理,c#,generics,bdd,C#,Generics,Bdd,我有以下代码,其中className是我需要作为类传递的字符串值,这样可以避免编写多个switch case语句 [When(@"Execute Request with model ""(.*)""")] public void WhenExecuteRequestWithModel(string className) { switch (className) { case "Cu

我有以下代码,其中className是我需要作为类传递的字符串值,这样可以避免编写多个switch case语句

 [When(@"Execute Request with model ""(.*)""")]
        public void WhenExecuteRequestWithModel(string className)
        {
            switch (className)
            {
                case "Customer":
                    if (_settings.Request.Method == Method.GET)
                        _settings.Response = _settings.RestClient.Execute<Customer>(_settings.Request);
                    else
                        _settings.Response = _settings.RestClient.ExecuteAsyncRequest<Customer>(_settings.Request).GetAwaiter().GetResult();
                    break;
                case "CustomerStatus":
                    if (_settings.Request.Method == Method.GET)
                        _settings.Response = _settings.RestClient.Execute<CustomerStatus>(_settings.Request);
                    else
                        _settings.Response = _settings.RestClient.ExecuteAsyncRequest<CustomerStatus>(_settings.Request).GetAwaiter().GetResult();
                    break;
            }
        }
[当(@“使用模型“(.*)”执行请求时]
当ExecuteRequestWithModel(字符串类名称)时公共无效
{
开关(类名)
{
案例“客户”:
if(_settings.Request.Method==Method.GET)
_settings.Response=\u settings.RestClient.Execute(\u settings.Request);
其他的
_settings.Response=\u settings.RestClient.ExecuteAsyncRequest(\u settings.Request).GetAwaiter().GetResult();
打破
案例“CustomerStatus”:
if(_settings.Request.Method==Method.GET)
_settings.Response=\u settings.RestClient.Execute(\u settings.Request);
其他的
_settings.Response=\u settings.RestClient.ExecuteAsyncRequest(\u settings.Request).GetAwaiter().GetResult();
打破
}
}

请帮助

看起来您正试图将其与Specflow绑定,因此只能传入字符串。如果传递的
className
是类的全名,或者如果您能够推断出类的全名(例如,通过在名称空间前加前缀),那么您应该能够使用反射来实例化适当的泛型方法

但是,坦率地说,您最好还是坚持使用
开关
语句。无论哪种方式,您都应该能够通过创建助手方法来减少重复代码

        switch (className)
        {
            case "Customer":
                ExecuteRestMethod<Customer>()
                break;
            case "CustomerStatus":
                ExecuteRestMethod<CustomerStatus>();
                break;
        }

public void ExecuteRestMethod<T>()
{
                if (_settings.Request.Method == Method.GET)
                    _settings.Response = _settings.RestClient.Execute<T>(_settings.Request);
                else
                    _settings.Response = _settings.RestClient.ExecuteAsyncRequest<T>(_settings.Request).GetAwaiter().GetResult();
}
开关(类名)
{
案例“客户”:
executeTestMethod()
打破
案例“CustomerStatus”:
executeTestMethod();
打破
}
public void executeTestMethod()
{
if(_settings.Request.Method==Method.GET)
_settings.Response=\u settings.RestClient.Execute(\u settings.Request);
其他的
_settings.Response=\u settings.RestClient.ExecuteAsyncRequest(\u settings.Request).GetAwaiter().GetResult();
}

“请帮助”是什么?如果要使用反射调用方法,请查看。一个更干净的解决方案是使这个函数成为通用函数,但它听起来像是自动将它连接到某个东西上。谢谢StriplingWarrior!