我有一个静态类:
public static class ConfigurationDetails
{
public static string SharepointServer { get; set; }
public static string Username { get; set; }
public static string Password { get; set; }
public static string SharepointDomain { get; set; }
public static string ServiceLibrary { get; set; }
public static string SqlServer { get; set; }
public static string SQLUsername { get; set; }
public static string SQLPassword { get; set; }
public static string SQLDomain { get; set; }
}
需要从字典的值更新。使用如果代码如下:
var configValues = ReadConfiguration();
if (configValues.ContainsKey("SharepointServer"))
{
ConfigurationDetails.SharepointServer = configValues["SharepointServer"];
}
if (configValues.ContainsKey("ServiceLibrary"))
{
ConfigurationDetails.ServiceLibrary = configValues["ServiceLibrary"];
}
if (configValues.ContainsKey("Username"))
{
ConfigurationDetails.Username = configValues["Username"];
}
if (configValues.ContainsKey("Password"))
{
ConfigurationDetails.SharepointServer = configValues["Password"];
}
现在这将完成这项工作但是如果有条件的话会有很多。我试过LINQ,但这是我最接近的。
configValues.Where(kv => kv.Key == "SharepointServer").ToList().ForEach(kv => ConfigurationDetails.SharepointServer = kv.Value);
并没有任何好处。请其他任何想法。
答案 0 :(得分:3)
LINQ不是正确的工具。但无论如何你可以改进它:
string value;
if (configValues.TryGetValue("SharepointServer", out value))
ConfigurationDetails.SharepointServer = value;
if (configValues.TryGetValue("ServiceLibrary", out value))
ConfigurationDetails.ServiceLibrary = value;
if (configValues.TryGetValue("Username", out value))
ConfigurationDetails.Username = value;
if (configValues.TryGetValue("Password", out value))
ConfigurationDetails.Password = value;
这更简洁,更有效(尽管在这种情况下这并不重要)。
答案 1 :(得分:2)
您可以使用反射来使用配置值填充静态类:
var type = typeof(ConfigurationDetails);
var flags = BindingFlags.Static | BindingFlags.Public;
foreach(var kvp in configValues)
{
var property = type.GetProperty(kvp.Key, flags);
if (property != null)
property.SetValue(null, kvp.Value);
}
答案 2 :(得分:0)
我们必须从ReadConfiguration();
获得什么样的返回类型?
如果它是一个列表,那么使用静态类成员的存储将导致数据丢失,因为只会存储最后的值,而早期的值将被覆盖。
否则,您可以通过确定静态类的属性来实现反射,并假设Configuration中的属性以相同的方式命名,然后以这种方式分配值。