C#中设置之间的歧义问题

4
我做了一个带有GUI和一些用户设置文件的C#应用程序。然而,当我尝试读取当前设置的值,例如MySettings.Default.SettingsName;,它对于第一组设置,比如MyFirstSettings,运行得非常完美。但是对于第二组设置,让我们称之为MySecondSettings,我会遇到一个错误,提示说My first Settings.DefaultMySecondSettings.Default之间存在歧义。不过,除了使用.Default,我没有找到任何其他访问设置的方式。

如果有什么提示,将不胜感激!

Axel


也许提供更多背景会有帮助。你使用的是什么类型的“设置”?是内置于Visual Studio中的吗? - kmort
这篇 Stack Overflow 的文章和答案有帮助吗?https://dev59.com/5mYq5IYBdhLWcg3wkRe_ - Phillip Kinkade
@kmort:是的,我使用的是Visual Studio中内置的设置,你可以通过创建新项目并选择设置来添加它们。创建后,我只更改了变量,而没有更改文件的名称或位置。 - user2950764
@Philip:也许如果我是更有经验的程序员,我就能理解如何将其应用到我的问题上了,抱歉! - user2950764
3个回答

5
如果您有两个设置文件,通常不会出现任何问题:
以下内容对我来说完美地工作(并且编译):
Settings1.Default.Value1 = "11";
Settings1.Default.Save();

Settings2.Default.Value1 = "22";
Settings2.Default.Save();

因此,如果您在VisualStudio以外的某种方式创建/复制了Settings2文件(例如),则可能会出现问题。 (在这种情况下,两个设置文件仍可能指向同一个“Settings1”类)。
我的创建Settings2文件的方法是使用Ctrl键拖放并重命名它,从“Copy of Settings1”更改为“Settings2”。 选择“添加/新建项…”并选择新的设置文件也很好用。 编辑: 如问题的作者在下面评论所述:
在DAQSettings“文件夹”中,我发现Designer的两个实例,一个名为Day Settings1.Designer,另一个仅命名为Settings.Designer。
…解释了其中的问题,因为某些类/元素存在重复命名,因此清除问题的方法需要进行“手动处理”。

非常感谢您的回答!目前我所尝试的只是将值读入文本框,这与您的示例相反。但我想过程应该是相同的。无论如何,我使用标准的Visual Studio方式创建了两个设置文件,并且自那以后除了其中的值之外没有更改任何内容。我也没有移动它们,它们应该在属性中吗?顺便说一下,它们包含不同的变量,因为它们是连接到计算机的不同类型传感器的设置。我假设可以像普通对象一样设置参数来创建新实例? - user2950764
你应该提供更多关于你的代码的细节,特别是一些“棘手”的部分。 - Agat
AccelerometerName.Text = AccelerometerSettings.Default.accelerometerName;AccelerometerResolution.Text = Convert.ToString(AccelerometerSettings.Default.accelerometerResolution);非常好用!DAQName.Text = DAQSettings.Default.daqName;却出现了奇怪的错误...(我承认这些名称很混乱,但如果不明显,大写字母开头是设置的名称,而首字母是文本框的名称,我想给它赋值)。 提前感谢! - user2950764
打开你的 AccelerometerSettings.Designer.csDAQSettings.Designer.cs 文件,查看其中定义了哪些类名。 - Agat
我认为你在这里找到了一些东西!在DAQSettings“文件夹”中,我发现了两个Designer实例,一个名为Day Settings1.Designer,另一个只是名为Settings.Designer。将它们全部删除并重新创建DAQSettings就解决了问题,非常感谢你的帮助! - user2950764
好的。我现在会更新答案,提供更多关于问题的具体细节。但是仍然很奇怪,这怎么可能发生... - Agat

1
在我的情况下,实际上我在默认设置文件名Default中有一个设置。这导致了一个错误,显示如下:
 Ambiguity between Settings.Default and Settings.Default

更改这个解决了错误。

注意:是的,将该设置命名为“默认”是个糟糕的想法,但这是一个只做一件事情的极小程序,所以如果有人在我后面看到这个,他们可能知道它是用来做什么的。


0

我遇到了“Settings.Default和Settings.Default之间的歧义”错误。然后我进入了Settings.Designer.cs,删除了底部命名为“Default”的内部类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接