首页 > 解决方案 > 使用未分配的局部变量“KubeClient”

问题描述

在 C# 控制台应用程序中出现错误。

使用未分配的局部变量“KubeClient”

我尝试在我的应用程序中使用 Kubernetes 客户端。但它与上述错误一起工作。我知道错误是由于未初始化的变量 KubeClient 造成的。但是我在我的 webapi 项目中使用了这种方式。我不明白其中的区别。我如何使用 kubernetes 客户端进行初始化。它显示

由于其保护级别而无法访问

. 请帮帮我?

我的代码是

using k8s;
using k8s.Models;


public bool ReadTLSSecretIteratable(string secretname, string namespacename)
        {
            V1Secret sec = null;
            Kubernetes KubeClient;
            try
            {
                 sec = KubeClient.ReadNamespacedSecret(secretname, namespacename);
            }
            catch (Microsoft.Rest.HttpOperationException httpOperationException)
            {
                var content = httpOperationException.Response.Content;
                Console.WriteLine(content);
                throw httpOperationException;

            }
retrun true;
}

标签: c#kubernetes.net-core

解决方案


如果您的变量未分配,您将得到“使用未分配的变量错误”。这是这里的情况:

Kubernetes KubeClient;

KubeClient 变量没有赋值。如果你写:

Kubernetes KubeClient = null;

比编译时错误会消失,因为现在该值为 NULL。但这并不能解决问题,因为显然您不能在为空(没有值)的变量上调用方法,并且在运行时会出现空引用异常。

初始化变量的常规方法是使用 new:

Kubernetes KubeClient = new Kubernetes([pass constructor parameters]);

有时有一些静态工厂方法会进行复杂的初始化:

Kubernetes KubeClient = Kubernetes.Create([pass constructor parameters]);

最后是依赖注入,我猜 webapi 项目就是这种情况。您使用依赖容器注册类型,而不是在需要时通过构造函数或有时通过属性获取它们:

public class MyClass
{
   public MyClass(Kubernetes k)
   {
      // Kubernetes is passed by DI container without new keyword.
   }
}

请执行下列操作:

  • 阅读 C# 中的类初始化,理解它是至关重要的(首先是类(C# 编程指南)
  • 阅读一般和 .net 核心中的依赖注入,这非常重要(例如.NET 中的依赖注入
  • 阅读 Kubernetes 库的文档,应该有关于如何正确初始化它的示例和说明

推荐阅读