C# 在不使用new关键字的情况下,无法为结构内的属性赋值

C# 在不使用new关键字的情况下,无法为结构内的属性赋值,c#,.net,struct,C#,.net,Struct,如果不使用新关键字初始化结构,我无法为结构内的属性赋值。如果我试图给属性赋值,我会得到以下错误。但是我可以给公共变量赋值,或者在结构内部调用一个方法,而不需要新的关键字。我正试图找到这种行为的原因。请帮忙 错误:使用未分配的局部变量“pd2” 不使用新关键字在结构内调用方法 只有在确保每个字段都已初始化(这将导致整个struct被初始化)的情况下,才能对结构调用方法。如果尚未完全初始化每个字段,则无法对其执行任何其他操作,因为收到的错误消息告诉您。您需要初始化所有字段,然后才能使用该属性设置器,

如果不使用新关键字初始化结构,我无法为结构内的属性赋值。如果我试图给属性赋值,我会得到以下错误。但是我可以给公共变量赋值,或者在结构内部调用一个方法,而不需要新的关键字。我正试图找到这种行为的原因。请帮忙

错误:使用未分配的局部变量“pd2”

不使用新关键字在结构内调用方法

只有在确保每个字段都已初始化(这将导致整个
struct
被初始化)的情况下,才能对结构调用方法。如果尚未完全初始化每个字段,则无法对其执行任何其他操作,因为收到的错误消息告诉您。您需要初始化所有字段,然后才能使用该属性设置器,例如通过调用默认构造函数

不使用新关键字在结构内调用方法


只有在确保每个字段都已初始化(这将导致整个
struct
被初始化)的情况下,才能对结构调用方法。如果尚未完全初始化每个字段,则无法对其执行任何其他操作,因为收到的错误消息告诉您。在使用该属性设置程序之前,您需要初始化所有字段,例如通过调用默认构造函数。

请注意,对于
结构而言,这是非常糟糕的设计。您应该避免像瘟疫一样的可变结构,并确保它们是不可变的。@Servy,谢谢!我知道这是一个糟糕的设计,我这样做是出于好奇和学习的目的,我试图找出为什么我不能为结构中的属性赋值。你的回答很有道理,谢谢!注意,对于
struct
,这是非常糟糕的设计。您应该避免像瘟疫一样的可变结构,并确保它们是不可变的。@Servy,谢谢!我知道这是一个糟糕的设计,我这样做是出于好奇和学习的目的,我试图找出为什么我不能为结构中的属性赋值。你的回答很有道理,谢谢!
struct P
        {
            public int i;
            public int j;
            public string e;
            public string Name { get; set; }

            public void Showi()
            {
                Console.WriteLine(string.Format("Display i:{0}",this.i));
            }
        }
static void Main(string[] args)
        {
            P pd2;
            pd2.i = 1;
            pd2.j = 1;
            pd2.e = "test";
            pd2.Name = "abc"; //This is a property, shows error here
         }