以下两种字符串方法的区别是什么?
string str1 = dr["RAGStatusCID"].ToString();
string str2 = (string)dr["Description"];
dr
的内容。第一个调用dr["RAGStatusCID"]
的索引器上每个对象都可以重写的ToString方法。第二个将dr["Description"]
变量转换为字符串。如果我们使用心灵感应技能并假设dr
是一个SqlDataReader,那么这两个表达式基本上做同样的事情,只是如果Description
列不是一个字符串,类型转换可能会在运行时抛出异常。dr
的类型或它的索引器操作返回什么,但显然,这是两个非常不同的操作。
第一个调用dr
的get索引器,并在返回的引用上调用ToString()
方法,允许该引用所指向的对象提供其数据的字符串表示形式。 这样做的一般意图是允许对象本身以字符串的有意义表示形式返回自己。
第二个调用尝试将索引器返回的引用强制转换为System.String
。返回的对象必须是System.String
的实例,或者必须是编译器可以调用自定义转换运算符的类型。这里的目的是确保返回的对象可以被视为System.String
的实例。您可以在MSDN上阅读更多关于转换的信息(包括用户定义的转换)。
第一个调用返回字符串的方法。必须有人实现ToString方法。第二个只是拆箱。
string str1 = dr["RAGStatusCID"].ToString();
dr["RAGStatusCID"]
返回的对象上的 .ToString()
方法。它保证返回一个字符串或 null。string str2 = (string)dr["Description"];
此处尝试将 dr["Description"]
返回的对象转换为字符串。如果返回的对象不是字符串,则会抛出异常。
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)”
xxx.ToString()
调用该对象上的方法将其转换为字符串对象。 (string)xxx
假定对象的类型已经是字符串,并在现有对象上执行强制转换。因此,在第一种情况下发生了转换,在第二种情况下仅明确标识了类型。
更简洁地说,如果在您的示例中 RagStatusCID
是一个整数,并且您尝试调用 (string)dr["RagStatusCID"],则会引发异常,因为类型不是字符串,而是 int。调用 .ToString()
执行转换,输出为字符串。
(string) 是一种类型转换操作。.ToString() 是从 Object 类继承的方法。每个对象都有一个 .ToString(),但并非所有对象都有一个 (string)。此外,某些对象将转换为与 .ToString() 输出不同的字符串。
.toString()
是一种方法,就像其他任何方法一样,(String)
是一种类型转换,是一种语言结构,用于将一个数据类型视为另一个兼容的类型。.toString()
就像你可能遇到的其他任何方法一样,它通常被认为是一种“特殊”的方法,但实际上不是这样,它只是返回一串字符串。因为它是基本 Object
类型的成员,所以可以确保在每个对象中都可用。因此,它通常用于提供它是成员的对象的文本表示。默认情况下,在 C# 中,这是对象类型的名称。通常希望重写此方法以提供更有意义的名称,但它只需要返回一个字符串,可以是任何您喜欢的字符串。object
),在这种情况下,它实际上只是一个“普通的强制转换”。请注意,除非进行任何转换,否则只有字符串或字符串子类 “可以像一个字符串一样处理”。(string)(object)42
无论如何都会失败,尽管它真的很想成功 :-/ - user166390