¿Por qué usar string en lugar de string.format?

Sabiendo por qué usar cadenas interpoladas, solo aquellos que han pisado el pozo pueden entender que si ha usado string.format para más de 5 marcadores de posición hoy, entonces creo que podrá resonar con el dolor.

Uno: experiencia dolorosa

Primero, un fragmento de código escrito por Zeng Jin, experimentemos:

    LogHelper.WriteLog(string.Format(@"=== Square发送服务中  === 【第四步】 leaflet发送成功。  marketID={0}, 
                                       marketName={1}, 总共客户:{2}, 成功:{3}人, 失败:{4}人,重复:{5}人,
                                       当前优先级:{6},所属shopID={7}",
                                      leafletEntity.MarketingID, leafletEntity.MarketingName, 
                                      leafletEntity.CustomerList.Count,leafletEntity.SuccessCount,
                                      leafletEntity.FailCount, leafletEntity.RepeatCustomerNum, 
                                      leafletEntity.Priority, leafletEntity.ShopID));

Hay hasta 8 marcadores de posición, y cuando escribí esto, habría tres puntos débiles.

1. El marcador de posición no puede escribirse incorrectamente

Por ejemplo, aquí {0}, {1}, {2} .... no se pueden escribir como {0}, {0}, {2}, lo que resulta en la salida repetida de los resultados.

2. El número de valores de parámetros no puede ser más o menos

Por ejemplo, el valor del último parámetro leafletEntity.ShopID se pierde, lo que da como resultado 8 marcadores de posición y 7 parámetros, lo que hará que el sistema arroje una excepción.

3. El orden de los valores de los parámetros no puede ser incorrecto

Hay demasiados valores de parámetros y es difícil asegurarse de que el orden no sea incorrecto. Por ejemplo, aquí leafletEntity.FailCount y leafletEntity.RepeatCustomerNum se invierten en leafletEntity.RepeatCustomerNum y leafletEntity.FailCount, ¿puede verlo de un vistazo? ? ?

Dos: soluciones

string.format también es un problema histórico dejado por imitar el lenguaje C. Ahora sale C # 6.0. Esta cadena interpolada resuelve perfectamente estos tres problemas. No se entusiasme demasiado. Luego, cambie el comienzo del artículo a Insertar versión.

            LogHelper.WriteLog($@"=== Square发送服务中  === 【第四步】 leaflet发送成功。 
                                  marketID={leafletEntity.MarketingID}, 
                                  marketName={leafletEntity.MarketingName}, 
                                  总共客户:{leafletEntity.CustomerList.Count},
                                  成功:{leafletEntity.SuccessCount}人, 
                                  失败:{leafletEntity.FailCount}人,
                                  重复:{leafletEntity.RepeatCustomerNum}人,
                                  当前优先级:{leafletEntity.Priority},
                                  所属shopID={leafletEntity.ShopID}");

El método de interpolar una cadena es simplemente agregar "$" delante de la cadena. Dar a todos un poco de tiempo para probarla cuidadosamente. ¿Es una buena solución a los 3 puntos de dolor que mencioné antes?

1. El uso de operadores trinoculares en la interpolación.

Muchas veces en el desarrollo empresarial, no puede simplemente completar una variable, y debería ser mejor admitir algunos valores de expresión, como el operador trinocular más utilizado

<1> Uso incorrecto

Si escribe esto directamente, no pasará un compilador vicioso, como el siguiente.

<2> uso adecuado

La solución también puede ser simple, solo agregue un () a la periferia.

2. Interpolación de lógica compleja.

Si tiene una lógica empresarial compleja, se recomienda comenzar un método separado.

    class Program
    {
        static void Main(string[] args)
        {
            var num = 10;

            var info = $"i={GetNum(num)}";
        }

        public static int GetNum(int num)
        {
            return num == 10 ? 1 : 2;
        }
    }

Como su lógica de negocios es relativamente simple, puede usar la delegación en línea.

Tres: explora el principio

A continuación, exploremos qué tipo de azúcar sintáctico, como las cadenas interpoladas, está en el nivel IL. Puede ver el código IL a través de la herramienta ILSpy.

De la captura de pantalla anterior, de hecho, la llamada "cadena interpolada" es string.format, el azúcar sintáctico del compilador

Puntos a tener en cuenta:

Debido a que hay una operación de caja, debe ser un refrigerio. Si Console.WriteLine se ejecuta varias veces, habrá una cierta pérdida de rendimiento. Se recomienda hacer la operación de caja con anticipación, como la siguiente.

        static void Main(string[] args)
        {
            int i = 1, j = 2, k = 3;

            var it = i.ToString();
            var jt = j.ToString();
            var kt = k.ToString();

            for (int m = 0; m < int.MaxValue; m++)
            {
                Console.WriteLine($"i={it},j={jt},k={kt}");
            }
        }

Ok, este es el final de este artículo, espero ayudarte.

Supongo que te gusta

Origin www.cnblogs.com/huangxincheng/p/12679226.html
Recomendado
Clasificación