关于将对象转换为字符串

时间:2016-02-03 05:49:18

标签: c# .net

我在 C#.Net 上测试了有关将对象转换为字符串的内容。见下文!

    private static void stringCast(object obj)
    {
        string StringResult;

        #region " obj.ToString() "
        try
        {
            StringResult = obj.ToString();
            Console.WriteLine("obj.ToString() Successed ");
        }
        catch
        {
            Console.WriteLine("obj.ToString() Failed ");
        }
        #endregion

        #region " Convert.ToString(obj) "
        try
        {
            StringResult = Convert.ToString(obj);
            Console.WriteLine("Convert.ToString(obj) Successed ");
        }
        catch
        {
            Console.WriteLine("Convert.ToString(obj) Failed ");
        }
        #endregion

        #region " (string)obj "
        try
        {
            StringResult = (string)obj;
            Console.WriteLine("(string)obj Successed ");
        }
        catch
        {
            Console.WriteLine("(string)obj Failed ");
        }
        #endregion

        #region " obj as string "
        try
        {
            StringResult = obj as string;
            Console.WriteLine("obj as string Successed ");
        }
        catch
        {
            Console.WriteLine("obj as string Failed ");
        }
        #endregion
    }

    [STAThread]
    public static void Main(string[] args)
    {
        try
        {
            object ExecuteScalarResult;

            Console.WriteLine(String.Empty);
            Console.WriteLine(" obj is \"TEST\" ");

            ExecuteScalarResult = "TEST";

            stringCast(ExecuteScalarResult);

            Console.WriteLine(String.Empty);
            Console.WriteLine(" obj is number ");

            ExecuteScalarResult = 0123;

            stringCast(ExecuteScalarResult);

            Console.WriteLine(String.Empty);
            Console.WriteLine(" obj is null ");

            ExecuteScalarResult = null;

            stringCast(ExecuteScalarResult);

            Console.WriteLine(String.Empty);
            Console.WriteLine(" obj is DBNull ");

            ExecuteScalarResult = DBNull.Value;

            stringCast(ExecuteScalarResult);

        }
        finally
        {
            Console.WriteLine(String.Empty);
            Console.Write(" Please any key to exit. ");
            Console.ReadKey();
        }
    }

enter image description here

  

obj是"TEST"(字符串类型)

     

obj.ToString()成功了   Convert.ToString(obj)成功了   (string)obj成功了   obj as string成功了   

     

obj是0123(数字类型)

     

obj.ToString()成功了   Convert.ToString(obj)成功了   (string)obj 失败
  obj as string成功了   

     

obj是null(null Type)

     

obj.ToString() 失败
  Convert.ToString(obj)成功了   (string)obj成功了   obj as string成功了   

     

obj是DBNull(班级类型) [新对象()是相同的]

     

obj.ToString()成功了   Convert.ToString(obj)成功了   (string)obj 失败
  obj as string成功

我需要更多信息。有人可以解释一下吗?

2 个答案:

答案 0 :(得分:4)

是否曾以有条理的方式学习语言?

我们走了:

ToString是一种INSTANCE方法。它需要一个对象。阅读引用和值类型之间的区别。这就是为什么它不能用于null - 这是一个空引用。 Convert.ToString确实有效,因为它是转换类的静态方法 - 尤其适用于这种情况。

字符串检查对象是否为string类型。没有转换发生。这意味着DbNull和"数字" (无论你放在那里)失败,因为那些不是字符串。你可以转换它们 - 但AS可以在没有转换的情况下进行检查(主要用于检查类是否实现了特定的接口)。

答案 1 :(得分:0)

  

(字符串)obj失败

这是因为没有从Integer到String定义的类型转换。所以你必须使用ToString()方法。类似地,DBNull为字符串。

  

obj.ToString()失败

您无法在空引用上调用实例方法ToString()。您需要一个有效的对象来调用ToString()方法。

查看以下关于as关键字的链接:

https://msdn.microsoft.com/en-us/library/cscsdfbt.aspx#Anchor_0