unity toint32 parse long float convertir convert c# string casting parsing

toint32 - string to int c# unity



Casting vs Converting an object toString, cuando el objeto realmente es una cadena (9)

Esto no es realmente un problema, sin embargo, tengo curiosidad. Cuando guardo una cadena en permite decir una DataRow, se convierte en Object. Cuando quiero usarlo, tengo que convertirlo en ToString. Por lo que sé, hay varias formas de hacerlo, primero es

string name = (string)DataRowObject["name"]; //valid since I know it''s a string

y otro es:

string name = DataRowObject["name"].ToString();

Estoy interesado en ¿cuál es la diferencia entre ambos? ¿El primero es más eficiente? (Esto es solo una especulación, en mi cabeza el método ToString () es implementado por algún mecanismo de bucle donde simplemente lanzarlo "podría" ser más rápido, sin embargo, esto es solo un "presentimiento" que tengo).

¿Hay alguna manera más rápida / más elegante de hacer esto?

¿Alguien puede aclarar esto para mí?


Los dos están destinados a diferentes propósitos. Se supone que el método ToString de cualquier objeto devuelve una representación de cadena de ese objeto. Casting es bastante diferente, y la palabra clave ''as'' realiza un molde condicional, como se ha dicho. La palabra clave "como" básicamente dice "consígame una referencia de este tipo a ese objeto si ese objeto es este tipo", mientras que ToString dice "consígame una representación de cadena de ese objeto". El resultado puede ser el mismo en algunos casos, pero los dos nunca deben considerarse intercambiables porque, como dije, existen para diferentes propósitos. Si tu intención es lanzar, siempre debes usar un yeso, NO ToString.

de http://www.codeguru.com/forum/showthread.php?t=443873

ver también http://bytes.com/groups/net-c/225365-tostring-string-cast


Básicamente, en su caso, es mejor dejar el tipo de conversión porque .ToString () puede ocultar errores. Por ejemplo, su esquema de base de datos cambió y el nombre ya no es de tipo cadena, pero con .ToString () su código aún funciona. Entonces, en este caso, es mejor usar el tipo de conversión.

Aquí está la implementación de String.ToString () - nada especial =)

public override string ToString() { return this; }


Downcasting es una operación relativamente lenta ya que CLR tiene que realizar varias comprobaciones de tipo de tiempo de ejecución. Sin embargo, en este escenario particular, la conversión a string es más apropiada que llamar a ToString() por coherencia (no se puede llamar a ToInt32 en un object , sino convertirlo a int ) y ToInt32 de ToInt32 .


En este caso:

string name = DataRowObject["name"].ToString();

dado que es una string , creo que el método ToString() de un objeto de cadena es simple como:

return this;

así que en mi humilde opinión no hay ninguna penalización de rendimiento.

PD. Soy un programador de Java, por lo que esta letra es solo una suposición.


Para el objeto de datos, le sugiero que use la palabra clave "como", como el siguiente código.

string name = DataRowObject["name"] as string;

Por favor verifíquelo antes de usar el valor.

if(name != null) { // statement for empty string or it has value } else { // statement for no data in this object. }


Quiero hacer un comentario más

Si vas a utilizar casting: string name = (string) DataRowObject ["name"] obtendrás una excepción: no se puede convertir el objeto de tipo ''System.DBNull'' para escribir''System.String ''en caso de que el registro en la tabla de la base de datos tiene un valor nulo.

En este escenario, debe usar: string name = DataRowObject ["name"]. ToString () o

Tienes que verificar el valor nulo como

if(!string.IsNullOrEmpty(DataRowObject["name"].ToString())) { string name = (string)DataRowObject["name"]; } else { //i.e Write error to the log file string error = "The database table has a null value"; }


Sé que mencionaste que el objeto es una cadena, pero en caso de que tengas miedo de que el objeto devuelto sea nulo, también puedes usar "Convert.ToString (DataRowObject [" name "]);" Esto tiene el beneficio adicional de devolver una cadena vacía (string.empty) si el objeto es nulo, para evitar excepciones de referencia nula (a menos, por supuesto, que desee una excepción en tales casos).


Si sabes que es una String entonces, por supuesto, empújala a una String . Lanzar tu objeto va a ser más rápido que llamar a un método virtual.

Editar: Aquí están los resultados de algunos benchmarking:

============ Casting vs. virtual method ============ cast 29.884 1.00 tos 33.734 1.13

Utilicé el BenchmarkHelper Jon Skeet así:

using System; using BenchmarkHelper; class Program { static void Main() { Object input = "Foo"; String output = "Foo"; var results = TestSuite.Create("Casting vs. virtual method", input, output) .Add(cast) .Add(tos) .RunTests() .ScaleByBest(ScalingMode.VaryDuration); results.Display(ResultColumns.NameAndDuration | ResultColumns.Score, results.FindBest()); } static String cast(Object o) { return (String)o; } static String tos(Object o) { return o.ToString(); } }

Por lo tanto, parece que el lanzamiento es, de hecho, un poco más rápido que llamar a ToString() .


ToString () no realiza un molde por defecto. Su propósito es devolver una cadena que represente el tipo (por ejemplo, "System.Object").

Si desea evitar el lanzamiento, podría intentar pensar en una implementación fuertemente tipada (utilizando genéricos, por ejemplo) y evitar DataRowObject por completo.