2010-03-01 19 views
9

Esto puede ser algo trivial, pero en C# ¿prefiere int o UInt16 al almacenar un puerto de red en una variable? Las clases de marco utilizan int al tratar con un puerto de red, aunque UInt16 representa realmente los valores válidos.¿Debo usar int o UInt16?

Respuesta

8

firmado (int/short etc, en lugar de que uint/ushort) tienen la ventaja de ser compatible con CLS, por lo que se recomienda a menos que tenga una buena razón.

Re int vs short - en la mayoría de casos es más eficiente para compute con int (o uint), ya que todos los operadores están optimizados para esto. Si solo está almacenando y recuperando, entonces esto no es un problema, por supuesto.

+0

Creo que los tipos sin firmar cumplen con CLS comenzando con 2.0. Ha pasado mucho tiempo desde que miré esto, así que podría estar equivocado. – JaredPar

+0

@JaredPar - curiosamente, 'ushort' no genera una advertencia, pero' uint' sí (utilizando VS2008): "Advertencia Tipo de argumento 'uint' no cumple con CLS" –

+0

@JaredPar - también, MSDN " Esta API no cumple con CLS. La alternativa compatible con CLS es Int32. " http://msdn.microsoft.com/en-us/library/system.uint16.aspx (también dice que para 4.0) –

0

si tiene un procesador de 32 bits y usará un valor de 16 bits (para ahorro de memoria) se alineará con 32 bits. Así que creo que no es tan importante usar 16bit uint en lugar de 32bit de valor.

+1

Excepto en una matriz, por supuesto. –

+0

sí, eso es correcto – tga

Cuestiones relacionadas