首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行时遍历properties.settings

在运行时遍历properties.settings
EN

Stack Overflow用户
提问于 2015-09-25 09:19:57
回答 2查看 1.8K关注 0票数 0

我已经创建了32种properties.settings类型的int32。我将在运行时使用它们--读取和写入一些数据,并使用foreach命令检查每个设置值。我在迭代属性值时遇到了一些问题。这是我的代码:

代码语言:javascript
复制
 private void button1_Click(object sender, EventArgs e)
 {
     foreach (SettingsProperty c in Properties.Settings.Default.Properties)
     {
         if (c[0,0]==0)     // i can not reach this byte :(
         {
                c[0, 0] = 1;   // :((
         }
     }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-27 13:21:16

SettingsProperty的值存储在其DefaultValue属性中。尝试以下几点:

代码语言:javascript
复制
private void button1_Click(object sender, EventArgs e)
{
  foreach (SettingsProperty c in Properties.Settings.Default.Properties)
  {
    if (c.DefaultValue[0,0] == 0)
    {
      c.DefaultValue[0, 0] = 1;
    }
  }
}

还可以使用Linq简化代码:

代码语言:javascript
复制
private void button1_Click(object sender, EventArgs e)
{
  foreach (SettingsProperty c in Properties.Settings.Default.Properties
                                                .Cast<object>()
                                                .Where(c => ((int[,])((SettingsProperty)c).DefaultValue)[0, 0] == 0))
  {
    c.DefaultValue[0, 0] = 1;
  }
}

或者在一行代码中更好:

代码语言:javascript
复制
private void button1_Click(object sender, EventArgs e)
{
  Properties.Settings.Default.Properties.Cast<object>()
                                        .Where(c => ((int[,])((SettingsProperty)c).DefaultValue)[0, 0] == 0)
                                        .ToList()
                                        .ForEach(c => ((int[,])((SettingsProperty)c).DefaultValue)[0, 0] = 1);

  // .ToList() is added because .ForEach() is not available on IEnumerable<T>
  // I added .Cast<object>() to convert from IEnumerable to IEnumerable<object>. Then I use the cast to SettingsProperty so you can use the DefaultValue.
}

最后,这个问题可能会有所帮助:C# How to loop through Properties.Settings.Default.Properties changing the values

票数 -1
EN

Stack Overflow用户

发布于 2016-04-05 15:53:15

不幸的是,另一个解决方案将运行,但是不正确的。您可以通过比较来确认这一点:

Properties.Settings.Default.Properties[c.name].DefaultValueProperties.Settings.Default[c.name],并且发现如果属性被分配了一个新的值--即使它已经保存了--它们是不同的。

DefaultValue不存储当前值;只有全局范围中的默认值。

要获得实际值,必须在Properties.Settings.Default.PropertyValues上进行迭代。就像这样:

代码语言:javascript
复制
foreach(SettingsPropertyValue value in Properties.Settings.Default.PropertyValues )
{
  if (value.PropertyValue[0,0] == 0)
  {
    value.PropertyValue[0, 0] = 1;
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32778869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档