我在面试中得到了这个问题,我不知道如何解决它。我回答说这是不可能的,但实际上我不知道。
如果不修改主方法中的任何代码,如何更新以下代码以防止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
}
}
这个问题的解决方案是什么?我在这里问这个,因为我真的很好奇这个解决方案而且我自己无法回答它。这里的大多数评论是错误的。我试图解决它,但我没有看到解决方案(如果存在解决方案)。
答案 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";
}
}