using System;namespace Check
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
CheckForNullReference(null,null);
CheckForNullReference("","");
CheckForNullReference(null,"");
} public static void CheckForNullReference(object variable, string variableName)
{
if (variableName == null)
{
Console.WriteLine("Object:string——variableName is null");
} if (null == variable)
{
Console.WriteLine("Object:string——variable is null");
}
} public static void CheckForNullReference(string variable, string variableName)
{
if (variableName == null)
{
Console.WriteLine("string:string——variableName is null");
} if (null == variable)
{
Console.WriteLine("string:string——variable is null");
}
} public static void CheckForNullReference(object variable, object variableName)
{
if (variableName == null)
{
Console.WriteLine("Object:object——variableName is null");
} if (null == variable)
{
Console.WriteLine("Object:object——variable is null");
}
}
}
}不知道为什么所有的都走public static void CheckForNullReference(string variable, string variableName)这个函数了?

解决方案 »

  1.   

    怎么了?(string,string)最匹配,难道不是吗?
      

  2.   

    CheckForNullReference(null,null);中null我觉得不应该当string对象来看待的,它是一个空对象,应该看作Object更容易接收一些。
      

  3.   

    null可以转换为string,而且更直接。“空”对象?没有这种东西(对象)。只有空指针,它是一个struct。
      

  4.   

    sorry,Empty是class,不是struct。它还是可以直接转换为string的。如果你第一个参数是证书之类的,不能直接转换为string的,就会转换为object了。
      

  5.   

    忘记在那里有记载了,好像是这样的:比如“子类”兼容,那么转换首先被确认为相容。但是object应该是个例外,如果对象重写ToString方法则字符串换换更优先。但是,如果对象实现了 IConvertible,那么它有直接对object的转换方法,那么它又优先于对string的转换。或者对象根本没有重写ToString,就被封装成为object。