C# 如何将字符串转换为变量引用?
我必须从配置文件中添加许多共享文件夹。名称很长,但都以“名称”、“域”、“用户名”和“密码”结尾 例如:C# 如何将字符串转换为变量引用?,c#,C#,我必须从配置文件中添加许多共享文件夹。名称很长,但都以“名称”、“域”、“用户名”和“密码”结尾 例如: AddSharedFolder( myConfigurationHandler.MyConfiguration.MyService.RSController.repositoryName, myConfigurationHandler.MyConfiguration.MyService.RSController.repositoryDomain, myConfigurationH
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");
}
显然,最后一种方法是错误的。但是如何将字符串转换为变量名呢?或者,这真的是一种愚蠢的编程实践吗?您可以使用反射并四处查看,但在这种情况下,这是一种非常糟糕的编程实践 如果您不想使用这些长名称,请将您的设置包装成更易于处理的格式,并接受该类中的长名称。执行以下操作是否会更容易(且不会牺牲类型安全性):
var controller = myConfigurationHandler.MyConfiguration.MyService.RSController;
AddSharedFolder( controller.repositoryName, controller.repositoryDomain, controller.repositoryUsername, controller.repositoryPassword);
那不是正确的方法。正确的方法是为定义属性的类型引入一个变量。大概是这样的:
var controller = myConfigurationHandler.MyConfiguration.MyService.RSController;
AddSharedFolder(
controller.repositoryName,
controller.repositoryDomain,
controller.repositoryUsername,
controller.repositoryPassword);
在C#中没有办法进行Eval(“…”),因为语言并不是那么动态的。因此,您上次尝试的方法将不起作用
我会去的
var ctr = myConfigurationHandler.MyConfiguration.MyService.RSController;
AddSharedFolder(ctr.repositoryName, ctr.repositoryDomain,
ctr.repositoryUsername, ctr.repositoryPassword);
或者,您可以使用字符串作为路径,但这实际上是走错了路