xxx.tostring()和(string)xxx有什么区别?

时间:2011-01-24 19:51:11

标签: c# asp.net

下面两个字符串方法的区别是什么?

string str1 = dr["RAGStatusCID"].ToString();
string str2 = (string)dr["Description"];

8 个答案:

答案 0 :(得分:5)

这取决于dr是什么。第一个调用ToString方法,每个对象可以覆盖dr["RAGStatusCID"]的{​​{3}}。第二个indexer dr["Description"]变量为字符串。

如果我们使用我们的心灵感应技巧并假设drcasts那么这两个表达式几乎完全相同,只是如果Description,强制转换可能会在运行时抛出异常}列不是字符串。

答案 1 :(得分:4)

您没有提到dr的类型或它的索引器操作返回的内容,但表面上看,这是两种截然不同的操作。

第一个调用dr的get索引器并在返回的引用上调用ToString()方法,允许引用引用的对象提供其数据的字符串表示。 这样做的一般意图是允许对象本身返回一个有意义的表示形式的字符串

第二次调用尝试将索引器返回的引用强制转换为System.String。返回的对象必须是System.String的实例,或者必须是编译器可以调用自定义转换运算符的类型。 这里的目的是确保返回的对象可以被视为System.String 的实例。您可以在MSDN上read more about conversions(包括用户定义的)。

答案 2 :(得分:3)

第一个调用返回字符串的方法。有人必须实现ToString方法。第二个是拆箱。

答案 3 :(得分:2)

string str1 = dr["RAGStatusCID"].ToString(); 

这会调用从.ToString()调用返回的对象的dr["RAGStatusCID"]方法。保证返回一个字符串或null。

string str2 = (string)dr["Description"]; 

这会尝试将dr["Description"]返回的对象强制转换为字符串。如果返回的对象不是字符串,则抛出异常。

答案 4 :(得分:0)

xxx.ToString()调用该对象上的方法将其转换为字符串对象。 (string)xxx假定对象的类型已经是字符串,只是对现有对象执行强制转换。因此,在第一种情况下,转换发生,在第二种情况下,它只是明确地识别类型。

更简洁地说,如果你的例子中RagStatusCID是一个整数而你试图调用(字符串)dr [“RagStatusCID”]你会得到一个异常,因为该类型不是字符串,它是一个INT。调用.ToString()执行转换,输出为字符串。

答案 5 :(得分:0)

(string)是一个转换操作。 .ToString()是一个从Object类继承的方法。一切都有.ToString(),但并非所有东西都有(字符串)。此外,某些对象将转换为与.ToString()输出不同的字符串。

答案 6 :(得分:0)

简而言之,.toString()是一种方法,就像任何其他方法一样,(String)是一个强制转换,一种语言结构,用于将一种数据类型视为另一种兼容类型。

现在有一些细节:

.toString()是一种方法,就像您可能遇到的任何其他方法一样。它通常被认为是某种方式的“特殊”方法,但它不是真的,它只是返回一个字符串。因为它是基类Object类型的成员,所以可以依赖它在每个对象中都可用。出于这个原因,它通常用于提供其所属对象的文本表示。默认情况下,在c#中,这是对象类型的名称。通常需要覆盖此方法以提供更有意义的名称,但它需要做的只是返回一个字符串,这可以是您喜欢的任何字符串。

如前所述,它并没有什么特别之处,你可以很容易地使用ToInt(),ToDouble()和ToChar()方法来为各自的类型提供相同的功能。

Casting是一种语言结构,这意味着它内置于语言中,并专门针对该语言实现。它用于在不需要显式转换的情况下,在不同位置使用兼容但不同的类型。

答案 7 :(得分:0)

我不知道C#是否正确,但它可能是,所以:

(String)myinstance隐式调用myinstance类的.toString()实现

如果您有这样的课程:

class User
{
      private integer userId;
      private integer userName;
      ... some code here...
      public toString()
      {
           return "Username: " + this.userName + " (" + this.userId + ")";
      }
}

使用方法toString定义(String)instance投射会做什么

User myuser = new User("Alex", 22);
String myuserdump = (String)myuser;
print(myuserdump);

将打印“用户名:Alex(22)”