我有以下属性:
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;
}
我可以以某种方式使用类似匿名方法的内容,只需在GetPort()
属性protected static string Port { get; } =
旁边插入代码吗?
答案 0 :(得分:3)
是的,你可以:
protected static Func<string> Port { get; } = () =>
{
// ...
return port;
}
你可以修改它,在第一次访问时立即调用,只需按照Dennis_E在评论中的建议调用一次:
protected static string Port { get; } = ((Func<string>)(() =>
{
// ...
return port;
}))();
问题是,你为什么要这样做?您当前的解决方案要好得多,并且与FxCop(CA1810)兼容,所以我会保持原样。
另一种可能性是一个简单的吸气剂:
protected static string Port
{
get
{
// ...
return port;
}
}
请注意,在第一种情况下,用法有点尴尬:
var p = Port();
在简单的getter案例(以及你的版本)中很自然:
var p = Port;