我在 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();
}
}
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
成功
我需要更多信息。有人可以解释一下吗?
答案 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