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);
或者,您可以使用字符串作为路径,但这实际上是走错了路