jay*_*won 66 c# string tostring
使用以下两个语句有什么区别?在我看来,第一个"as string"是类型转换,而第二个ToString是对将输入转换为字符串的方法的实际调用?只是寻找一些洞察力,如果有的话.
Page.Theme = Session["SessionTheme"] as string;
Page.Theme = Session["SessionTheme"].ToString();
Run Code Online (Sandbox Code Playgroud)
Phi*_*ert 96
如果Session["SessionTheme"]不是string,as string将返回null.
.ToString()将尝试通过调用对象的ToString()方法将任何其他类型转换为字符串.对于大多数内置类型,这将返回转换为字符串的对象,但对于没有特定.ToString()方法的自定义类型,它将返回对象类型的名称.
object o1 = "somestring";
object o2 = 1;
object o3 = new object();
object o4 = null;
string s = o1 as string; // returns "somestring"
string s = o1.ToString(); // returns "somestring"
string s = o2 as string; // returns null
string s = o2.ToString(); // returns "1"
string s = o3 as string; // returns null
string s = o3.ToString(); // returns "System.Object"
string s = o4 as string; // returns null
string s = o4.ToString(); // throws NullReferenceException
Run Code Online (Sandbox Code Playgroud)
要记住的另一个重要事项是,如果对象是null,调用.ToString()将抛出异常,但as string只会返回null.
Wim*_*dse 13
该as关键字将基本上检查对象是否为该is类型的实例,使用MSIL操作码isinst.如果是,则返回对象的引用,否则返回null引用.
正如许多人所说的那样,它并没有尝试执行这样的转换 - 这意味着某种异常处理.不是这样.
ToString(),简单地调用对象的ToString()方法,或者是由类实现的自定义方法(对于大多数内置类型执行转换为字符串) - 或者如果没有提供,则基类为object1,返回类型信息.
我稍微扩展了 Philippe Leybaert 已接受的答案,因为虽然我找到了比较其中三个的资源,但我从未找到比较所有四个的解释。
(string)objobj as stringobj.ToString()Convert.ToString(obj)object o1 = "somestring";
object o2 = 1;
object o3 = new object();
object o4 = null;
Console.WriteLine((string)o1); // returns "somestring"
Console.WriteLine(o1 as string); // returns "somestring"
Console.WriteLine(o1.ToString()); // returns "somestring"
Console.WriteLine(Convert.ToString(o1)); // returns "somestring"
Console.WriteLine((string)o2); // throws System.InvalidCastException
Console.WriteLine(o2 as string); // returns null
Console.WriteLine(o2.ToString()); // returns "1"
Console.WriteLine(Convert.ToString(o2)); // returns "1"
Console.WriteLine((string)o3); // throws System.InvalidCastException
Console.WriteLine(o3 as string); // returns null
Console.WriteLine(o3.ToString()); // returns "System.Object"
Console.WriteLine(Convert.ToString(o3)); // returns "System.Object"
Console.WriteLine((string)o4); // returns null
Console.WriteLine(o4 as string); // returns null
Console.WriteLine(o4.ToString()); // throws System.NullReferenceException
Console.WriteLine(Convert.ToString(o4)); // returns string.Empty
Run Code Online (Sandbox Code Playgroud)
从这些结果中我们可以看出,当是字符串或 null时,(string)obj和obj as string的行为方式相同;obj否则(string)obj将抛出无效的强制转换异常并obj as string仅返回 null。obj.ToString()
并且Convert.ToString(obj)彼此的行为方式相同,除了当obj为 null 时,在这种情况下obj.ToString()将抛出空引用异常并Convert.ToString(obj)返回空字符串。
所以这是我的建议:
(string)obj如果您想为无法分配给字符串变量的类型抛出异常,那么效果最好obj as string如果您不想引发任何异常并且也不想使用非字符串的字符串表示,那么效果最好obj.ToString()如果你想抛出 null 异常,效果最好Convert.ToString(obj)如果您不想引发任何异常并想要非字符串的字符串表示形式,则效果最好编辑:我发现Convert.ToString()实际上null根据重载的不同会进行不同的处理,因此在本例中将该变量声明为 an 实际上很重要object。如果您调用Convert.ToString()一个string变量,那么null它将返回null而不是string.Empty.
Page.Theme = Session["SessionTheme"] as string;
Run Code Online (Sandbox Code Playgroud)
试图转换为字符串
而
Page.Theme = Session["SessionTheme"].ToString;
Run Code Online (Sandbox Code Playgroud)
调用tostring方法,这可能是真的.此方法不会强制转换,它应返回此对象的字符串表示形式.