O método deve retornar vários valores

Olá eu

Eu tenho o método em c #, tenho que retornar vários valores desse método sem usar collections como matrizes. Existe alguma maneira confiável?

Bem, você poderia usar:

  • uma class / struct / type personalizada, contendo todos os seus valores
  • parâmetros de out

Ou seja:

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

ou

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

Sim, a palavra out chave out :

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

então ligue assim:

 int i1, i2, i3; ReturnManyInts(out i1, out i2, out i3); Console.WriteLine(i1); Console.WriteLine(i2); Console.WriteLine(i3); 

quais saídas:

 10 20 30 

EDITAR:

Estou vendo que muitos posts estão sugerindo para criar sua própria class para isso. Isso não é necessário, pois o .net fornece uma class para fazer o que já estão dizendo. A turma de Tuple .

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

então você pode recuperá-lo assim:

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

Existem sobrecargas genéricas para que você possa ter até 8 tipos exclusivos em sua tupla.

Se você estiver usando o .NET 4.0, poderá usar uma das classs genéricas Tuple para retornar vários valores de uma chamada de método. A class Tuple estática fornece methods para criar objects Tuple. Portanto, você não precisa definir seu próprio tipo de retorno para o método.

 public Tuple Execute() { return new Tuple("Hello World", 2); } 

Sim, poderia criar um novo tipo que conteria várias propriedades e, em seguida, retornaria esse tipo:

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

Por que usar o ‘out’ não é uma maneira confiável? (Ou você fez um erro de digitação e quis dizer sem?)

Existem vários methods:

  • Retorna um object que contém vários valores (struct / class etc)
  • Fora
  • ref

Uma class de descritor ou estrutura. Você deve colocá-lo em algum lugar, pois é lógico que um método deva retornar apenas um valor. Alternativamente, você pode usar ou ref, mas eu iria retornar uma aula.

Btw o que está segurando você não usar collections ?.

 public int Method Name(out string stringValue, out int intValue) { /// Method goes here /// return intVaraible } 

aqui você terá 3 valores de retorno 1. stringValue 2. intValue 3. intVariable