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。