Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > .NET
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-09-2005
omar_e_rc omar_e_rc is offline
Miembro
 
Registrado: mar 2005
Posts: 32
Poder: 0
omar_e_rc Va por buen camino
Question Switch en C#

como puedo hacer para que en C# en un switch pueda comparar un rango, como en pascal seria:

case x of
'a'..'z':
begin
{Instrucciones}
end;

'1'..'9':
begin
{Instrucciones}
end;
end;

como puedo hacer la misma construccion en C#?
Muchas gracias, anticipada....
Responder Con Cita
  #2  
Antiguo 26-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Código:
int apuesta = 4;
 switch (apuesta)
 {
 	case 0:
 		Console.WriteLine("¿Cero patatero?");
 		break;
 	case 1:
 		Console.WriteLine("¡Uno no es ninguno!");
 		break;
 	case 2:
 	case 3:
 		Console.WriteLine("¡... dos, tres, responda otra vez!");
 		break;
 	default:
 		Console.WriteLine("¡Anímese y haga su apuesta!");
 		break;
 }
La cláusula "default" es opcional: se ejecutará si no hay ninguna otra coincidencia. Hay un libro muy majo sobre C# disponible gratuitamente en la página Web de José Antonio González Seco, por si le quieres echar un vistazo y ampliar información sobre el tema.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 26-09-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Por lo que veo entonces, al igual que en C, no es posible esa maravilla de Delphi de poder especificar rangos. Ha de poner todas las etiquetas case 'a' hasta case 'z'.

// Saludos
Responder Con Cita
  #4  
Antiguo 26-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por roman
Por lo que veo (...)
Que es poco... Quiero decir que, aunque he tratado de hacerlo, no he conseguido algo parecido a lo que dices... ¿y porqué traté de hacerlo? Pues porque no me disgusta C# y traté de dejarle bien Sin embargo, insisto en que ves poco, o sea, que yo no sepa hacerlo no significa que no pueda hacerse... Además, cabría decir que otras cosas tendrá C# que le hagan maravilloso, hasta cierto punto, claro está.

Esta mañana me he puesto a contar los subdirectorios de un directorio con Delphi. O fue anoche, no recuerdo bien. El caso es que me topaba con algunos problemas, porque "como lo hacía" (véase abajo) no me contaba los directorios ocultos, o los del sistema,... en fin, yo quería contar todos los subdirectorios de un directorio, pero, todos, todos. Pues bien, no digo yo que no pueda mejorarse mucho, pero, esto es al cabo lo que hize con Delphi para lograr lo dicho:

Código Delphi [-]
 function NumeroSubDirectorios(directorio: string;
   ocultos, sistema, soloLectura: boolean) : integer;
 var
   SR: TSearchRec;
   atributos: Cardinal;
 begin
   Result := 0;
   atributos := faDirectory;
   if ocultos then atributos := atributos or faHidden;
   if sistema then atributos := atributos or faSysFile;
   if soloLectura then atributos := atributos or faReadOnly;
   directorio := IncludeTrailingPathDelimiter(directorio);
   if FindFirst(directorio +'*', atributos, SR) = 0 then
   begin
     repeat
       if (SR.Name <> '.') and (SR.Name <> '..')
         and DirectoryExists(directorio + SR.Name) then
           Inc(Result);
     until FindNext(SR) <> 0;
     SysUtils.FindClose(SR);
   end;
 end;
Entonces estaba con el Visual C# por aquí rodando y me he dicho, ¿cómo lo harías en C#, teniendo en cuenta que quieres listar todos los subdirectorios, incluidos los ocultos, los de sistema, los de solo lectura? Pues lo hize, y el caso es que no guardé lo escrito, pero, tampoco importa mucho, se escribe de nuevo, aquí va:

Código:
 public int NumeroSubDirectorios(string directorio)
 {
   if(System.IO.Directory.Exists(directorio))
 	return System.IO.Directory.GetDirectories(directorio).Length;
   else
 	return 0;
 }
¿No es maravilloso C#? Si bien es verdad que para mí tengo que ambos lenguajes lo son: y son del mismo padre, se podría decir, tal vez un poco a la ligera, pero, ¿hay o no hay diferencia entre el API Win32 y el API .NET? Bueno... también yo, como si el mundo estuviera esperando que yo descubriera algo...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 26-09-2005
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.927
Poder: 26
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
La comparacion que haces no es justa. Eso que escribiste DEFINITIVAMENTE NO ES DEL C#!

Es de la API de .NET. Exactamente igual codigo se puede hacer con Delphi, si es Delphi.NET

Código Delphi [-]
  function NumeroSubDirectorios(directorio:string):Integer
 begin
   if (System.IO.Directory.Exists(directorio)) then   
   Result := System.IO.Directory.GetDirectories(directorio).Length
   else
   Result := 0;
 end;

API <> Lenguaje
__________________
El malabarista.

Última edición por mamcx fecha: 26-09-2005 a las 19:41:03.
Responder Con Cita
  #6  
Antiguo 26-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por mamcx
La comparacion que haces no es justa. Eso que escribiste DEFINITIVAMENTE NO ES DEL C#!
Bueno, no sé si te refieres a mí... Si es así diré que no era mi intención comparar fuera de la anécdota. No soy quién para comparar lenguajes de programación. No llego a tanto, ni mucho menos. Además tengo que agradecerle mucho a Delphi, no quisiera ni por pienso caer en comparaciones odiosas con este lenguaje en particular ni con ningún otro.

Y llevas razón, hay poco C# ahí y más bien mucho .NET. Bien es cierto que podría escribirse una clase "Directory" en Delphi que contara con un método "GetDirectories" y reducir el código para usar esa clase a un par de líneas, como en C#, que tal vez detrás de la clase "Directory" de C# halla mucha tela que cortar, lo ignoro.

De todos modos creo que lo que dice roman puede hacerse en C# y soy yo el que no sé hacerlo. Y por dar al César lo que de él es diré que las primeras tomas de contacto, como suele decirse, con C#, me parecieron estupendas, personalmente, claro está, el lenguaje me pareció una maravilla, hablando de maravillas
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 26-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por mi mismo más arriba
¿No es maravilloso C#? Si bien es verdad que para mí tengo que ambos lenguajes lo son: y son del mismo padre, se podría decir, tal vez un poco a la ligera, pero, ¿hay o no hay diferencia entre el API Win32 y el API .NET?
API != lenguaje

De todas maneras no se me escapa que en este Hilo es muy probable que me fuera por los cerros de Úbeda... las cosas son como son, para qué negarlo, hay veces que incluso son lo que parecen que son
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #8  
Antiguo 26-09-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
La comparación no es justa no sólo por lo que dice mamcx. Es como si en Delphi pusiera algo como:

Código Delphi [-]
uses InterfazGH;

function NumeroSubDirectorios(directorio: String)
begin
   if(InterfazGH.DirectorioExiste(directorio))
     Result := InterfazGH.ObtenNumDirecs(directorio);
   else
     Result := 0
end;

Es decir, incluyo una librería que ya contenga una función que haga lo que quiero.

Claro que en .NET la ventaja sería que la biblioteca ya está hecha y en Delphi tuvimos que disponer de una de terceros (la referencia a Al Gonzalez es adrede)

Por otra parte no era mi intención menospreciar a C# ni mucho menos, sólo apuntar que el requerimiento original- especificar un rango en la clásula switch -parece no ser posible.

// Saludos
Responder Con Cita
  #9  
Antiguo 18-06-2006
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.609
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile Nueve meses después

¡Hola a todos!


Cita:
Empezado por roman
La comparación no es justa no sólo por lo que dice mamcx. Es como si en Delphi pusiera algo como:

Código Delphi [-]
uses InterfazGH;

function NumeroSubDirectorios(directorio: String)
begin
   if(InterfazGH.DirectorioExiste(directorio))
     Result := InterfazGH.ObtenNumDirecs(directorio);
   else
     Result := 0
end;

Es decir, incluyo una librería que ya contenga una función que haga lo que quiero.

Claro que en .NET la ventaja sería que la biblioteca ya está hecha y en Delphi tuvimos que disponer de una de terceros (la referencia a Al Gonzalez es adrede)...
Casi han transcurrido nueve meses desde aquella referencia y apenas esta noche me entero de la misma. Curiosa la vida. Estoy agradecido.

Por cierto, ahora Interfaz GH se llama GH Freebrary y estoy en el proceso de convertir todos sus identificadores al idioma inglés. También estoy depurando la biblioteca eliminando varias funciones que estaban muy fumadas . Está quedando muy padre, pero últimamente casi no he tenido tiempo de seguirle, aún me faltan algunos cientos de funciones por revisar.

Volviendo al tema del switch, es probable que aún en su versión felina (#), el lenguaje C siga careciendo de la ventaja mencionada del Case délphico. Supongo que esto es para mantener una cierta compatibilidad con todos los compiladores Cees del mundo, algo así como lo que sucede con SQL, que, sabemos, podría tener muchísimas mejoras, pero de oficializarse éstas se obligaría a muchos fabricantes a modificar sus gestores.

Un abrazo del 1 al 10.

Al González.
Responder Con Cita
  #10  
Antiguo 18-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno... leyendo este Hilo gracias a que lo revivió Al, lo cierto es que no me termino de creer que lo dejara pasar tal cual. O sea, he tratado de comparar un lenguaje de programación con la API de otro lenguaje de programa, y eso no es correcto, como ya se ha dicho.

Evidentemente, C# es un lenguaje de alto nivel, de propósito general y orientado a objetos. Y Delphi es exactamente así también. Por lo tanto, es evidente que con Delphi podrá hacerse prácticamente todo lo que pueda hacerse con C# y viceversa.

Eso parece claro al menos hablando de Windows. Y no quería dejar de decirlo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 02:33:19.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi