Format C # short/long / int?

W C / C# / etc. możesz powiedzieć kompilatorowi, że literalna liczba nie jest tym, czym się wydaje (np., float zamiast double, unsigned long zamiast int:

var d = 1.0; // double
var f = 1.0f; // float
var u = 1UL; // unsigned long

Itd.

Czy ktoś mógłby wskazać mi ich listę? Szukam przyrostka dla short lub Int16.
Author: iliketocode, 2011-04-28

5 answers

var d  = 1.0d;  // double
var d0 = 1.0;   // double
var d1 = 1e+3;  // double
var d2 = 1e-3;  // double
var f  = 1.0f;  // float
var m  = 1.0m;  // decimal
var i  = 1;     // int
var ui = 1U;    // uint
var ul = 1UL;   // ulong
var l  = 1L;    // long
Myślę, że to wszystko... nie ma dosłownych specyfikacji dla short/ushort/byte / sbyte
 229
Author: Thomas Levesque,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-17 09:55:51

Z §2.4.4.2 literały całkowite :

Typ liczby całkowitej jest określony w następujący sposób:

  • jeśli literał nie ma przyrostka, to ma pierwszy z tych typów, w których jego wartość może być reprezentowana: int, uint, long, ulong.
  • jeśli literał jest zakończony przez U lub u, ma pierwszy z tych typów, w których jego wartość może być reprezentowana: uint, ulong.
  • jeśli literał jest zakończony przez L lub l, ma pierwszy z tych typów, w którym jego wartość może być reprezentowana: long, ulong.
  • jeśli literał jest zakończony przez UL, Ul, uL, ul, LU, Lu, lU, lub lu, jest typu ulong.

I od §2.4.4.3 prawdziwe literały :

Jeśli nie podano przyrostka prawdziwego typu, typ prawdziwego literału jest podwójny. W przeciwnym razie sufiks typu rzeczywistego określa typ rzeczywistego literału w następujący sposób:

  • a real literalny przyrostek F lub {[22] } jest typu float. Na przykład literały 1f, 1.5f, 1e10f, i {[27] } są wszystkie typu float.
  • prawdziwy dosłowny przyrostek D lub d jest typu double. Na przykład literały 1d, 1.5d, 1e10d, i {[35] } są wszystkie typu double.
  • prawdziwy dosłowny przyrostek M lub m jest typu decimal. Na przykład literały 1m, 1.5m, 1e10m, i 123.456M są wszystkie typu decimal. Literal ten jest konwertowany na wartość dziesiętna poprzez przyjęcie dokładnej wartości i, w razie potrzeby, zaokrąglenie do najbliższej reprezentowalnej wartości za pomocą zaokrąglenia bankiera (sekcja 4.1.7). Każda skala widoczna w literale jest zachowana, chyba że wartość jest zaokrąglona lub wartość jest równa zero (w tym ostatnim przypadku znak i skala będą równe 0). Dlatego literał 2.900m będzie parsowany do postaci dziesiętnej ze znakiem 0, współczynnikiem 2900 i skalą 3.
 35
Author: BoltClock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-28 15:07:34

Jeśli twoja zmienna nie jest jeszcze krótka, musisz ją oddać wprost:

Object s = (Int16) 1;
 8
Author: Chris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-14 16:00:07

Nie ma takiego w skrócie. Wystarczy użyć short s = 1;.

 3
Author: Random832,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-28 15:07:22

Jeśli chcesz uniknąć odlewów typu, które często powodują ostrzeżenia z resharper, short.Parse("1") może być również alternatywą.

 -8
Author: EriF89,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-12 09:40:10