C# 在getter中筛选我的属性

C# 在getter中筛选我的属性,c#,.net,get,set,filtering,C#,.net,Get,Set,Filtering,这是我的密码: private Analyst _PrimaryAnalyst; public Analyst PrimaryAnalyst { get { Analyst activeAnalysts; if (this.PrimaryAnalyst.IsActive == true) { activeAnalysts = _PrimaryAnalyst;

这是我的密码:

private Analyst _PrimaryAnalyst;
public Analyst PrimaryAnalyst
{             
    get       
    {
        Analyst activeAnalysts;

        if (this.PrimaryAnalyst.IsActive == true)
        { 
            activeAnalysts = _PrimaryAnalyst;
        }

        return activeAnalysts; //"Use of unassigned local variable"               
    }         
    set
    {              
        SetPropertyValue("PrimaryAnalyst", ref _PrimaryAnalyst, value);                          
    }
}
基本上,我试图根据Analyst属性是否标记为活动来过滤它们。然后我只想返回活跃的分析师。(基于Analyst的bool属性),我在返回语句中得到一个错误,它说“使用未分配的局部变量”


但是,我在if语句中明确指定了它?

将getter的第一行更改为:

Analyst activeAnalysts = null;

问题是,如果if语句的计算结果为false,则该值永远不会设置,因此编译器不知道它应该返回什么。

将getter的第一行更改为:

Analyst activeAnalysts = null;

问题是,如果if语句的计算结果为false,则该值永远不会设置,因此编译器不知道它应该返回什么。

出现错误的原因是并非所有代码路径都会导致赋值。您应该在
if
之前初始化变量,或者包括
else
并将其分配给那里的某个对象

此外,您应该在
if
语句中检查您的私有变量,而不是公共变量(以避免
StackOverflowException
),并且假设
Analyst
是一个可空类,您还应该在检查
IsActive
之前确保它不为空。属性获取程序不应引发异常

还可以使用三元赋值简化getter:

get
{
    return (_PrimaryAnalyst != null && _PrimaryAnalyst.IsActive) 
        ? _PrimaryAnalyst 
        : null;
} 

出现错误的原因是并非所有代码路径都指向赋值。您应该在
if
之前初始化变量,或者包括
else
并将其分配给那里的某个对象

此外,您应该在
if
语句中检查您的私有变量,而不是公共变量(以避免
StackOverflowException
),并且假设
Analyst
是一个可空类,您还应该在检查
IsActive
之前确保它不为空。属性获取程序不应引发异常

还可以使用三元赋值简化getter:

get
{
    return (_PrimaryAnalyst != null && _PrimaryAnalyst.IsActive) 
        ? _PrimaryAnalyst 
        : null;
} 
在C#中,在为局部变量赋值之前,不能使用它

C语言规范,第1.6.6.2节

C#要求在其 可获得价值

让我们来看看你的代码

如果
this.PrimaryAnalyst.IsActive
为false,会发生什么情况?是,使用未分配的局部变量

可以通过初始化局部变量来解决此问题

Analyst activeAnalysts = null;

但这里还有另一个问题。您的代码会导致异常,因为您正在调用自身内部的方法(递归),但无法摆脱它,所以会导致异常 您应该将C中的行
this.primaryalyanalyst.IsActive==true
更改为
\u primaryalyanalyst.IsActive==true

;在为局部变量赋值之前,不能使用它

C语言规范,第1.6.6.2节

C#要求在其 可获得价值

让我们来看看你的代码

如果
this.PrimaryAnalyst.IsActive
为false,会发生什么情况?是,使用未分配的局部变量

可以通过初始化局部变量来解决此问题

Analyst activeAnalysts = null;

但这里还有另一个问题。您的代码会导致异常,因为您正在调用自身内部的方法(递归),但无法摆脱它,所以会导致异常
您应该将行
this.primaryalyanalyst.IsActive==true
更改为
\u primaryalyanalyst.IsActive==true

并非所有代码路径都指向赋值。您应该在
if
之前初始化变量,或者包括
else
并将其分配给那里的其他对象。并非所有代码路径都会导致分配。您应该在
if
之前初始化变量,或者包含一个
else
并将其分配给其他变量。此外,您的if子句将导致无限递归,因为它将反复调用getter。此外,您的if子句将导致无限递归,因为它会一次又一次地呼叫getter。