The variable is either undeclared or was never assigned warning
我有这样的代码:
这是基类:
1 2 3 4 5 6 7 8 9 10 11
| public class BaseClass : UserControl
{
protected ListView list;
protected TreeView tree;
public BaseClass()
{
//...
}
//...
} |
子班
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public partial class MyClass : BaseClass
{
public MyClass ()
{
InitializeComponent ();
this.BackColor = VisualStyleInformation .TextControlBorder;
this.Padding = new Padding (1);
}
//...
}
partial class MyClass
{
//...
private void InitializeComponent ()
{
this.tree = new System.Windows.Forms.TreeView();
this.list = new System.Windows.Forms.ListView();
//...
this.tree.Location = new System.Drawing.Point(0, 23);
this.tree.Name ="blablabla";
}
} |
警告:
1 2
| Warning 1 The variable 'tree' is either undeclared or was never assigned .
Warning 2 The variable 'list' is either undeclared or was never assigned . |
我做错什么了?这个变量在基类中声明,并在子类中赋值。
- 这是设计师的问题。重新生成解决方案并重新启动Visual Studio。
- 旁注:imho在这里写base.tree而不是this.tree更易读。
- 我认为这些领域没有任何问题。但你必须决定MyClass是否是public。两个partial class声明必须一致。
- Never assigned是对基类的适当警告。看起来应该是抽象的。
- @timschmelter imho,当此类型重写(或隐藏)基类中的成员时,只能使用base关键字。在这种情况下,成员只是继承的,所以我认为this.tree(或者只是tree,没有具体的实例说明)是最好的。
- @jeppestignielsen:尽管没有访问修饰符,但表示当类的另一部分是公共的时候,最严格的可访问性是公共的。
- @但这只是一块地。它不能是抽象的(除非它被更改为属性)。
- @jeppe-类(baseclass)可以是抽象的。
- @亨克·霍尔特曼,当我试图添加控件时,警告我不要使用MyClass的基类:this.Controls.Add(this.tree)。它不能是抽象的,但它有虚拟功能
- @你说得对,我不知道。我以为第二个"部分"被(含蓄地)宣布为internal,因此与第一部分不一致,但我错了。
- @jeppestiginelsen:如果它们具有不同的访问修饰符,那么您将得到一个编译时异常。但我必须承认,我也不知道C默认部分类的其他部分可访问性。我得测试一下。
- @威廉,我测试了你的代码,它工作得很好,如前所述,Slaks试图重建项目,重新启动vs.
- @Timschmelter:imho tree比两者都好。
这个问题没有答案,所以这里…
重新生成解决方案,然后重新启动为我工作的Visual Studio:-)
感谢斯莱克斯在上面的评论。
另讨论地点:
stackoverflow.com-变量"variable_name"未声明或从未分配。
social.msdn.microsoft.com-变量"controlu name"未声明或从未分配。
- 我的UserControl构造函数需要一个值。如果我传入一个对static readonly成员变量的引用,设计器将抛出一个异常(该变量要么未声明,要么从未赋值)。不幸的是,在CSharp(Visual Studio 2013)中,上述修复方法不适用于我。最后将输入参数移动到我添加到UserControl的Initialize方法。有趣的是,如果我只是将所需类型直接实例化到构造函数的输入参数中,那么一切都正常:this.myControl = new MyUserControl(new CustomType());。
- @按Acco有趣…听起来像是另一个问题。
- 不要为我工作:(
- 对我来说,当我将解决方案平台从混合平台改为任何CPU时,这个错误就消失了。
- 这个问题发生在我身上是因为我在为x64构建,但是Visual Studio设计器是在Visual Studio中的进程内托管的,这仍然是一个32位进程(甚至是VS2017)。在为x86重建并重新加载设计器之后,它工作了。