sharp from compiler compile comando c# compiler-construction

c# - from - csc c sharp compiler



Literales de números de compilación C# (3)

Es posible que desee comenzar mirando la especificación del lenguaje C # . La mayoría de los tipos se enumeran allí y tienen un sufijo:

  • L = largo
  • F = flotar
  • U = uint
  • Los de Ulong son un poco diferentes
  • m = decimal (dinero)
  • D = doble

Por supuesto, si deja de usar var , se soluciona todo el problema y su código se vuelve más legible (bueno, eso es subjetivo, pero para algo como esto, es más legible para otras personas:

var x = 0; //whats x? float x = 0; //oh, it''s a float byte x = 0; // or not!

¿Alguien sabe la lista completa de modificadores literales del número del compilador C #?

Por defecto, declarar ''0'' lo convierte en Int32 y ''0.0'' lo convierte en ''Doble''. Puedo usar el modificador literal ''f'' al final para asegurar que algo sea tratado como ''Single'' en su lugar. Por ejemplo, así ...

var x = 0; // x is Int32 var y = 0f; // y is Single

¿Cuáles son los otros modificadores que puedo usar? ¿Hay uno para forzar a Double, Decimal, UInt32? Intenté buscar en Google esto, pero no pude encontrar nada. Tal vez mi terminología es incorrecta y eso explica por qué estoy en blanco. Cualquier ayuda muy apreciada.


Si no quiere tener que recordarlos, el compilador también acepta un molde para el mismo propósito (puede verificar que el IL es el mismo efecto, es decir, el compilador, no el tiempo de ejecución, lo hace). Para tomar prestado el ejemplo anterior:

var y = (float)0; // y is single var z = (double)0; // z is double var r = (decimal)0; // r is decimal var i = (uint)0; // i is unsigned int var j = (long)0; // j is long var k = (ulong)0; // k is unsigned long

Y para que conste, estoy de acuerdo con que "var" es una mala elección aquí; Usaré felizmente var para SortedDictionary <SomeLongType, SomeOtherLongType>, pero para "int" es simplemente flojo ...


var y = 0f; // y is single var z = 0d; // z is double var r = 0m; // r is decimal var i = 0U; // i is unsigned int var j = 0L; // j is long (note capital L for clarity) var k = 0UL; // k is unsigned long (note capital L for clarity)

De la especificación C # 2.4.4.2 literales enteros y 2.4.4.3 literales reales. Tenga en cuenta que L y UL son preferibles en lugar de sus variantes en minúsculas para mayor claridad según lo recomendado por Jon Skeet .