我正在try 设置全局变量.经过一些阅读,我似乎可以构建一个全局类,但它需要是静态的.我就是这样做的:

public static class Globals
{
    static Configuration config = new Configuration();
    config.BasePath = "https://api.gateio.ws/api/v4";
    config.SetGateApiV4KeyPair("abc", "abc");

    static AccountApi apiInstance = new AccountApi(config);
 
    public static List<String> listing = [];
}

但当然,因为它是静态的,所以我不能在实例化配置对象之后设置basepath和SetGateApiV4KeyPair.那我该怎么做才好呢?

推荐答案

您始终可以将创建逻辑移动到静态方法并调用它:

public static class Globals
{
    private static Configuration config = CreateConfig();

    private static Configuration CreateConfig()
    {
        var result = new Configuration();
        config.BasePath = "https://api.gateio.ws/api/v4";
        config.SetGateApiV4KeyPair("abc", "abc");
        return result;
    }
    
    // ...
}

另一种方法可以是使用如所提供的答案@Olivier Jacot-Descombes中的静态构造函数.但值得注意的是,初始化的顺序可能非常重要(例如,参见本question).我强烈建议将"复杂"/相互依赖的情况的所有初始化移到静态ctor中,这样正确的顺序是显式的,您不应该担心其他实现细节(比如AccountApi实际对Configuration做了什么,或者初始化顺序是如何工作的):

public static class Globals
{
    private static readonly Configuration config;

    private static readonly AccountApi apiInstance;

    // Static constructor
    static Globals()
    {
        config = new()
        {
            BasePath = "https://api.gateio.ws/api/v4"
        };
        config.SetGateApiV4KeyPair("abc", "abc");
        apiInstance = new(config);
    }
}

Csharp相关问答推荐

. NET Core DB vs JSON模型设计

如何将Kafka消息时间戳转换为C#中的日期和时间格式?

Int和uint相乘得到LONG?

需要在重新启动ApplicartionPool或IIS后启动/唤醒API的帮助

实体框架核心中的ComplexType和OwnsOne有什么不同?

Thad.Sept()vs Task.Delay().Wait()

如何使用NumberFormatInfo

TCPClient阅读流

未找到任何HTTP触发器.成功部署Azure Functions Project后(c#)

确定System.Text.Json序列化中是否无法识别Type

如何比较C#中的L和ł(波兰字符)返回TRUE

BFF到具有AAD/Entra ID B2C的内部API(.NET/ASP.NET核心/标识.Web)

如何在microsoft.clearscript.v8的jsondata中使用Linq

C#System.Commandline:如何向命令添加参数以便向其传递值?

如何阻止可传递依赖项出现在项目中

读取测试项目中的应用程序设置

嵌套Blazor组件内的验证

C#If条件格式

自定义ConsoleForMatter中的DI/Http上下文

如何查找Span;T&>是否包含相同顺序的其他Span<;T&>