我有一个类Port
,表示端口号的最小值和最大值限制。
public class Port
{
public const int MinPortNumber = 1025;
public const int MaxPortNumber = ushort.MaxValue;
private readonly int _portNumber;
private Port(int portNumber)
{
_portNumber = portNumber;
}
public static implicit operator int(Port port) => port._portNumber;
public override string ToString() => $"{_portNumber}";
public static Port FromNumber(int portNumber)
{
Validate(portNumber);
return new Port(portNumber);
}
private static void Validate(int port)
{
if (port is < MinPortNumber or > MaxPortNumber)
throw PortRangeException.NotInRange(port, MinPortNumber, MaxPortNumber);
}
}
我试图从另一个项目访问其值,但在构建时收到编译错误[CS1061]:
public class ServiceViewModel
{
public ServiceViewModel()
{
_port = Port.MinPortNumber;
}
[ObservableProperty]
private int _port;
}
我在相同的项目中访问了此常量,如
if ((int)(service.Port) is < Port.MinPortNumber or > Port.MaxPortNumber) {}
而且确实奏效了。
那么,为什么编译器不允许我在这种情况下访问这个常量呢?
1条答案
按热度按时间p8h8hvxi1#
是我的错。
私有字段
[ObservableProperty] private int _port;
生成Port
属性,所以它隐藏了Port
类。解决方案是重命名此字段并重新生成属性。