Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否使用匿名方法初始化静态属性?_C#_Properties_Static - Fatal编程技术网

C# 是否使用匿名方法初始化静态属性?

C# 是否使用匿名方法初始化静态属性?,c#,properties,static,C#,Properties,Static,我拥有以下财产: 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

我拥有以下财产:

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;
}
我是否可以使用匿名方法将代码插入属性
受保护的静态字符串端口{get;}=
旁边的
GetPort()

是的,您可以:

protected static Func<string> Port { get; } = () =>
    {
        // ...

        return port;
    }
注意,在第一种情况下,用法有点笨拙:

var p = Port();
在简单的getter案例(以及您的版本)中,它是自然的:

var p = Port;
是的,你可以:

protected static Func<string> Port { get; } = () =>
    {
        // ...

        return port;
    }
注意,在第一种情况下,用法有点笨拙:

var p = Port();
在简单的getter案例(以及您的版本)中,它是自然的:

var p = Port;

为什么不使用静态构造函数?@enkryptor@enkryptor静态构造函数是一个选项,但这是带有部分类的大型集成测试设置的一部分,我有一个包含大量内容的静态构造函数,但如果我在静态构造函数中初始化端口,顺序就变得很重要。我担心下一个开发人员可能会在端口在构造函数中初始化之前访问端口。为什么不使用静态构造函数?@enkryptor@enkryptor静态构造函数是一个选项,但这是一个带有部分类的大型集成测试设置的一部分,我有一个包含大量内容的静态构造函数,但是如果我在顺序的静态构造函数变得很重要。我担心下一个开发人员可能会在构造函数中初始化端口之前访问端口。
Func
解决方案不同。每次调用
Port()
时,代码都将执行<代码>端口{get;}=GetPort()只执行一次。是的,正如@Dennis_E所指出的,只有一次执行是很重要的,因为同一个端口应该被多个应用程序使用(这用于在多进程集成测试中修改许多配置文件)。@Drutten但正如BartoszXP所指出的,不管怎样,你目前的解决方案要好得多。@Dennis\E我觉得我的解决方案变得太灵活了。直接初始化该值将表明属性的静态性:D@Drutten您可以这样做:
静态字符串端口{get;}=((Func)(()=>{/*do-stuff…*/return-Port;}))这很难看,但是
Func
的解决方案是不同的。每次调用
Port()
时,代码都将执行<代码>端口{get;}=GetPort()
只执行一次。是的,正如@Dennis_E所指出的,只有一次执行是很重要的,因为同一个端口应该被多个应用程序使用(这用于在多进程集成测试中修改许多配置文件)。@Drutten但正如BartoszXP所指出的,不管怎样,你目前的解决方案要好得多。@Dennis\E我觉得我的解决方案变得太灵活了。直接初始化该值将表明属性的静态性:D@Drutten您可以这样做:
静态字符串端口{get;}=((Func)(()=>{/*do-stuff…*/return-Port;}))