如何更新以下代码以防止NullReferenceException?

时间:2014-08-25 01:16:01

标签: c# .net

我在面试中得到了这个问题,我不知道如何解决它。我回答说这是不可能的,但实际上我不知道。

如果不修改主方法中的任何代码,如何更新以下代码以防止NullReferenceException并将“Hello World”写入consol?

public class MyClass
{
}

public class Program
{
    static void Main(string[] args)
    {
        MyClass myObj = null;
        Console.WriteLine(myObj.GetString()); // Will throw NullReferenceException 
    }
}

这个问题的解决方案是什么?我在这里问这个,因为我真的很好奇这个解决方案而且我自己无法回答它。这里的大多数评论是错误的。我试图解决它,但我没有看到解决方案(如果存在解决方案)。

3 个答案:

答案 0 :(得分:3)

要解决这个难题,可以使用extension method

public static class Extension
{
    public static string GetString(this MyClass myObj)
    {
        return "Hello World";
    }
}

答案 1 :(得分:0)

这将是非常糟糕的做法,并且没有充分的理由这样做,但您可以向MyClass添加静态构造函数,然后立即退出代码。

一般来说,制作代码使得调用null值而不是的方法导致异常是非常糟糕的做法。找出没有导致错误的原因会非常混乱。这个问题可能对语言理解有好处,但它描述的功能不应该完成。

public class MyClass
{
     static MyClass()
     {
          Console.WriteLine("Hello World!");
          System.Environment.Exit(0);
     }
}

MyClass的静态构造函数将在使用MyClass后立即调用。这回答了这个问题,因为它写了“Hello World"然后在main方法中进一步退出之前退出。

答案 2 :(得分:0)

如何在类中添加静态成员GetString()?有点像...

public class MyClass
{
  public static string GetString()
  {
    return "Hello World";
  }
}