我必须从配置文件中添加许多共享文件夹。名称很长,但都以“姓名”,“域名”,“用户名”和“密码”结尾。
一个例子是:
AddSharedFolder(
myConfigurationHandler.MyConfiguration.MyService.RSController.repositoryName,
myConfigurationHandler.MyConfiguration.MyService.RSController.repositoryDomain,
myConfigurationHandler.MyConfiguration.MyService.RSController.repositoryUsername,
myConfigurationHandler.MyConfiguration.MyService.RSController.repositoryPassword);
我的想法是把它称为
AddSharedFolder(
"myConfigurationHandler.MyConfiguration.MyService.RSController.repository");
然后有一个重载的AddSharedFolders方法:
private static void AddSharedFolder(string prefix)
{
AddSharedFolder(prefix + "Name", prefix + "Domain", prefix + "Username", prefix + "Password");
}
显然最后一种方法是错误的。但是如何将字符串转换为变量名?或者这是一个非常愚蠢的编程实践?
答案 0 :(得分:2)
C#中没有办法做Eval(“...”),语言不是那么动态。因此,您对方法的最后一次尝试将无效。
我会去
var ctr = myConfigurationHandler.MyConfiguration.MyService.RSController;
AddSharedFolder(ctr.repositoryName, ctr.repositoryDomain,
ctr.repositoryUsername, ctr.repositoryPassword);
或者,您可以使用字符串作为路径,但这确实会走错路线..
答案 1 :(得分:1)
你可以使用反射和捅,但在这种情况下编程实践真的很糟糕。
如果您不想使用这些长名称,请将您的设置包含在易于处理的内容中,并接受该类中的长名称。
答案 2 :(得分:1)
var controller = myConfigurationHandler.MyConfiguration.MyService.RSController;
AddSharedFolder( controller.repositoryName, controller.repositoryDomain, controller.repositoryUsername, controller.repositoryPassword);
答案 3 :(得分:1)
这不是正确的做法。正确的方法是为属性定义的类型引入一个变量。像这样:
var controller = myConfigurationHandler.MyConfiguration.MyService.RSController;
AddSharedFolder(
controller.repositoryName,
controller.repositoryDomain,
controller.repositoryUsername,
controller.repositoryPassword);