2015-08-29 1 views
2

Une fonction renvoie un objet, avec un membre d'objet rempli d'un tableau anonyme d'éléments; comment puis-je récupérer les articles individuels?accéder à différents types d'éléments à partir d'un tableau anonyme

l'objet qui est retourné d'une fonction:

public class FunctionCallResult 
{ 
    ...blah blah members... 
    public object ResultObject { get; set; } 
} 

La fonction:

FunctionCallResult SomeCrazyFunction(string irrelevant_param1, int some_other_irrelevant_param2) 
{ 
    ... some heavy duty code that raises eyebrows ... 
    return new FunctionCallResult{ new object[] { SomeCrazyClassX, AnotherCraxyClassY } }; 
} 

Un exemple d'appel de la fonction:

var myresult = SomeCrazyFunction("I am the walrus", 42); 

Mais maintenant, comment puis-je obtenir retour les objets individuels, qui sont de différentes classes? Alors, comment puis-je obtenir ces différents types de classe à partir du résultat retourné?

// can't do this... can't index type of object 
SomeCrazyClassXType classX = myresult.ResultObject[0]; 
AnotherCraxyClassYType classY = myresult.ResultObject[1]; 

+1

Les types anonymes ne s'appliquent pas vraiment ici. Un type anonyme est quelque chose comme 'var t = nouveau {A = 1, B = 2};' – theB

+0

Dans votre exemple, vous avez 2 ints dans un tableau anonyme. Mon exemple a juste des membres différents de ceux d'int. Pourquoi mon exemple n'est-il pas un tableau anonyme? Comment l'appelleriez-vous? –

+0

Ce que je veux dire, c'est que dans ma classe, il y a un membre 'objet'; alors est-ce que "new object [] {..., ...}" est fondamentalement différent de "new [] {..., ...}"? –

Répondre

1

Si vous « savez » ResultObject est un object[] lors de l'exécution et le nombre d'éléments et vous savez leurs types, vous pouvez les jeter à SomeCrazyClassXType et AnotherCraxyClassYType après la coulée ResultObject à un object[] de object.

Alors:

var resultObjectAsAnObjectArray = (object[])myresult.ResultObject; 
var classX = (SomeCrazyClassXType)(resultObjectAsAnObjectArray[0]); 
var classY = (AnotherCraxyClassYType)(resultObjectAsAnObjectArray[1]); 

Je dois voir plus de code/ce que vous faites réellement donner une meilleure recommandation.

+2

S'il connaît la commande (et donc la taille de manière inhérente)) alors il vaut mieux créer un Tuple. – Gusman

+0

Bien que cela fonctionne très bien, (et merci!) Je vais suggérer un Tuple –

+1

@Gusman Je suis d'accord que ce serait mieux - pour être juste la question était, en particulier, comment puis-je récupérer les objets individuels - J'essayais juste pour changer le moins de code possible et répondre à la question. –