C# 该变量未声明或从未分配过,重建不起作用

C# 该变量未声明或从未分配过,重建不起作用,c#,winforms,visual-studio,C#,Winforms,Visual Studio,我有一个同样的问题,这个问题在微软论坛上经常被问到——我有一个combobox控件和一个字符串数组,所以我将字符串数组分配给 Form1.Designer.cs private void InitializeComponent() { ... this.ComboBox_Target_0.Items.AddRange(Ranks); ... } 数组本身声明如下: string[] Ranks = { "Rank 1", "Rank 2", "Rank 3", "Rank 4", "Rank

我有一个同样的问题,这个问题在微软论坛上经常被问到——我有一个combobox控件和一个字符串数组,所以我将字符串数组分配给

Form1.Designer.cs

private void InitializeComponent()
{
...
this.ComboBox_Target_0.Items.AddRange(Ranks);
...
}
数组本身声明如下:

string[] Ranks = { "Rank 1", "Rank 2", "Rank 3", "Rank 4", "Rank 5", "Rank 6", "Rank 7", "Rank 8", "Rank 9", "Rank 10", "Rank 11", "Rank 12" };
如果我构建了我的解决方案,表单运行良好,组合框中列出了所有项目,并且工作正常。然而,表单设计者拒绝开始说“变量秩不是未声明就是从未分配”

我已经看到了关于这个问题的其他问题,并且已经尝试了他们(唯一)的解决方案-重建解决方案,关闭VS并将其打开备份。但那没用。我试着将字符串数组放入“InitializeComponent()”和“PublicForm1()”,每次都重新生成等等。然而,它并没有为我解决问题


让我检查一下-在这种情况下选择“忽略并继续”不会危害任何东西,对吗?

我同意您不应该修改设计器文件。如果出于某种原因,您需要在设计时提供这些值,并且您不想使用编辑器,我让它正常工作的唯一方法是将其放在
InitializeComponent
方法的最顶端:

string[] Ranks = new string[] { "Rank 1", "Rank 2", "Rank 3", "Rank 4", "Rank 5", "Rank 6", "Rank 7", "Rank 8", "Rank 9", "Rank 10", "Rank 11", "Rank 12" };
我在声明中添加了
新字符串[]
。这取决于编辑器在设计时创建列表的方式:

this.ComboBox_Target_0.Items.AddRange(new object[] {...
在这样定义
等级
之后,您的行将起作用:

this.ComboBox_Target_0.Items.AddRange(Ranks);
如果您只需要在运行时使用这些值,最好这样做(或其变体):


这是什么版本的Visual Studio?谢谢,这很有效!我是这样做的,因为有很多组合框,实际上,我希望使用相同的项目,并且如果需要的话,我还希望将来能够轻松地编辑数组的内容。我不知道在运行时只需要值和不需要值意味着什么。这只是意味着,如果您只是在设计表单(“设计模式”),并且在应用程序运行(“运行时”)之前不需要值,那么最好使用运行时方法。这样就不会干扰设计器文件。您仍然可以使用范围填充多个框。
public partial class Form1 : Form
{
    string[] Ranks = { "Rank 1", "Rank 2", "Rank 3", "Rank 4", "Rank 5", "Rank 6", "Rank 7", "Rank 8", "Rank 9", "Rank 10", "Rank 11", "Rank 12" };

    public Form1()
    {
        InitializeComponent();
        this.ComboBox_Target_0.Items.AddRange(Ranks);
    }
}