使用匿名方法初始化静态属性
本文关键字:初始化 静态 属性 方法 | 更新日期: 2023-09-27 18:35:21
>我有以下属性:
protected static string Port { get; } = GetPort();
private static string GetPort()
{
var tcpListener = new TcpListener(IPAddress.Loopback, 0);
tcpListener.Start();
var port = ((IPEndPoint)tcpListener.LocalEndpoint).Port.ToString();
tcpListener.Stop();
return port;
}
我可以以某种方式使用匿名方法之类的东西将代码插入属性protected static string Port { get; } =
旁边的GetPort()
中吗?
是的,你可以:
protected static Func<string> Port { get; } = () =>
{
// ...
return port;
}
您可以修改它,在首次访问时立即调用,并且只能调用一次,如Dennis_E在评论中建议的那样:
protected static string Port { get; } = ((Func<string>)(() =>
{
// ...
return port;
}))();
问题是,你为什么要这样?您当前的解决方案要好得多,并且与FxCop(CA1810)兼容,因此我会保持原样。
另一种可能性是一个简单的getter:
protected static string Port
{
get
{
// ...
return port;
}
}
请注意,在第一种情况下,用法有点尴尬:
var p = Port();
在简单的 getter 案例(和您的版本)中,这是很自然的:
var p = Port;