我基于单例模式创建了以下类:
public sealed class UTrans
{
private static volatile UTrans _instance;
private static readonly object syncRoot = new Object();
private UTrans(){}
private static UTrans Instance
{
get
{
if (_instance == null)
{
lock (syncRoot)
{
if (_instance == null)
_instance = new UTrans();
}
}
return _instance;
}
}
}
在这个类中,我创建了一个枚举属性和字符串属性
private static MethodType _method; // Alphabectic 1 - 50
public static MethodType Method
{
get { return _method; }
set { _method = value; }
}
private static string _uName;
public static string UserName
{
get { return _uName; }
set { _uName = value; }
}
我也有一些方法在这个类中有一些参数。当我在代码中调用类实例时,如果用户为属性赋值;将使用这些值。否则,将使用作为参数传递的值。
通过检查属性上的空值,这在 UserName 属性的情况下可以正常工作:
var un = UserName ?? user;
但是,我无法对枚举属性执行相同的检查,因为如果未分配一个值,该属性似乎会自动假定枚举的第一个值。
我试图通过将枚举的第一个值分配为“未指定”来规避这个问题。然后我可以继续编写这样的代码:
var processMethod = TranslateMethodType(Method) == "Unspecified" ? method : Method;
其中 TranslateMethodType 是将选定的枚举转换为等效字符串值的私有方法。
我不相信这是解决这个问题的最优雅的方法,并且希望得到一些关于这个问题的可能替代方案的反馈。
有没有办法检查类的用户是否没有为 MethodType 属性设置值,而不必添加“未指定”值作为第一个值,因为该值仅作为指示没有值的方式存在放?
显然,如果用户决定使用该值,则情况可能并非如此,并且以这种方式构造代码会产生不良结果。
可以将枚举方法标记为可空吗???