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