2010-05-27 16 views
6

HiiEl método debe devolver varios valores

Tengo el método en C#, tengo que devolver varios valores de ese método sin usar colecciones como matrices. ¿Hay alguna manera confiable?

+0

Puede usted por favor ampliar el "múltiples valores"? ¿Es un número constante de sus valores de retorno? ¿Están vinculados lógicamente? ¿Qué representan? ¿Están en el mismo tipo? – Kobi

+0

Posible duplicado de [¿Cómo puedo devolver múltiples valores desde una función en C#?] (Http://stackoverflow.com/questions/748062/how-can-i-return-multiple-values-from-a-function-in -c) –

Respuesta

10

Bueno, se podría utilizar:

  • una clase personalizada/estructura/tipo, que contiene todos sus valores
  • out parámetros

por ejemplo:

class MyValues 
{ 
    public string Val1 { get; set; } 
    public int Val2 {get; set; } 
} 

public MyValues ReturnMyValues(); 

o

public void ReturnMyValues(out string Val1, out int Val2); 
2

Sí podría crear un nuevo tipo que contendrá múltiples propiedades y luego regresar este tipo:

public MyType MyMethod() 
{ 
    return new MyType 
    { 
     Prop1 = "foo", 
     Prop2 = "bar" 
    }; 
} 
15

Sí, el out palabra clave:

public void ReturnManyInts(out int int1, out int int2, out int int3) 
{ 
    int1 = 10; 
    int2 = 20; 
    int3 = 30; 
} 

luego llamar así:

int i1, i2, i3; 
ReturnManyInts(out i1, out i2, out i3); 

Console.WriteLine(i1); 
Console.WriteLine(i2); 
Console.WriteLine(i3); 

que salidas:

10 
20 
30 

EDIT:

que estoy viendo que una gran cantidad de puestos están sugiriendo a crear su propia clase para esto. Esto no es necesario ya que .net te proporciona una clase para hacer lo que ya están diciendo. La clase Tuple.

public Tuple<int, string, char> ReturnMany() 
{ 
    return new Tuple<int, string, char>(1, "some string", 'B'); 
} 

entonces se puede recuperar de este modo:

var myTuple = ReturnMany(); 
myTuple.Item1 ... 
myTuple.Item2 ... 

hay sobrecargas genéricos para que pueda tener hasta 8 tipos únicos en su tupla.

+3

Además, el método 'Tuple.Create' puede inferir los tipos:' return Tuple.Create (1, "some string", 'B'); ' –

+3

Tenga en cuenta que Tuple es una nueva característica de .NET 4.0, cuál Jibu puede no (todavía) tener. –

0

A Clase descriptiva, o estructura. Debe colocarlo en alguna parte ya que es lógico que un método debe devolver solo un valor. Alternativamente puede usar out o ref, pero iría devolviendo una clase.

Btw ¿Qué le impide usar colecciones?

2

¿Por qué usar 'out' es una forma poco confiable? (¿O haces un error tipográfico y quería decir sin?)

hay varios métodos:

  • devolver un objeto que posee múltiples valores (struct/clase etc.)
  • out
  • ref
5

Si está utilizando .NET 4.0 puede usar una de las clases generic Tuple para devolver múltiples valores de una llamada a método. La clase estática Tuple proporciona métodos para crear objetos Tuple. Por lo tanto, no es necesario que defina su propio tipo de devolución para el método.

public Tuple<string,int> Execute() 
{ 
    return new Tuple<string,int>("Hello World", 2); 
} 
+0

Sólo un punto menor: los 8 tipos de Tuple son genéricos en C# 4.0. – Kobi

0
public int Method Name(out string stringValue, out int intValue) 
{ 
    /// 
      Method goes here 
    /// 

    return intVaraible 
} 

aquí obtendrá 3 Valores devueltos 1. stringValue 2. intValue 3. intVariable

Cuestiones relacionadas