# Differenze da Py a C#

**URL:** <https://it.discourse.mcneel.com/t/differenze-da-py-a-c/5603>\
**Category:** Scripting e Programmazione\
**Created:** [2 Dicembre 2023, 12:58pm UTC](https://it.discourse.mcneel.com/t/differenze-da-py-a-c/5603 "2023-12-02T12:58:54Z")\
**Posts on this page:** 10\
**Page:** 2

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [3 Dicembre 2023, 2:45pm UTC](https://it.discourse.mcneel.com/t/differenze-da-py-a-c/5603/21 "2023-12-03T14:45:21Z")

</div>

> [@0904](#):
>
> stamani sono riuscito a usare la tupla:

Bene !  
… Non sapevo che adesso ci fossero le tuple anche in C# … sono rimasto parecchio indietro. 😕  
Buono a sapersi. 🙂

> [@0904](#):
>
> poi ho optato per l’altra soluzione

Anche questo e’ un buon modo. 🙂

Bene, ormai conosci diversi metodi.  
Non credo che gli esempi in Python ti metteranno piu’ in difficolta’. 🙂

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [3 Dicembre 2023, 4:45pm UTC](https://it.discourse.mcneel.com/t/differenze-da-py-a-c/5603/22 "2023-12-03T16:45:47Z")

</div>

> [@emilio](#):
>
> … Non sapevo che adesso ci fossero le tuple anche in C#

> [@emilio](#):
>
> Capirei se restituisse una tuple con due valori: un GetObject e un Result.  
> A quel punto tu sai che il primo elemento della tuple e’ un GetObject e il secondo un Result.

ma io credevo che in quest’occasione me l’avvessi suggerito nell’usarlo 😂 🤣

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [3 Dicembre 2023, 5:21pm UTC](https://it.discourse.mcneel.com/t/differenze-da-py-a-c/5603/23 "2023-12-03T17:21:42Z")

</div>

> [@0904](#):
>
> ma io credevo che in quest’occasione me l’avvessi suggerito

No, parlavo di Python …  
😄

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [3 Dicembre 2023, 5:38pm UTC](https://it.discourse.mcneel.com/t/differenze-da-py-a-c/5603/24 "2023-12-03T17:38:21Z")

</div>

Emilio non dirmi parolacce:

```auto
    go.Get();
    
    if ( go.CommandResult() != rh.Commands.Result.Success ) return go.CommandResult();

```

```auto
    go.Get();

    if ( go.Object(0).Curve() == null ) return rh.Commands.Result.Nothing;

```

a quanto sembra con quest’ultima sintassi, il problema della sintassi precedente non si presenta. . .

in pratica **rh.Commands.Result.Failure** viene visto come un oggetto, mentre **go.CommandResult()** no

🤦‍♂️ 🤦‍♂️

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [3 Dicembre 2023, 8:42pm UTC](https://it.discourse.mcneel.com/t/differenze-da-py-a-c/5603/25 "2023-12-03T20:42:26Z")

</div>

Cioe’ nel primo caso hai un errore, mentre nel secondo no ?

Sembra strano … il tipo e’ lo stesso.

Il metodo e’ lo stesso, suppongo.  
E quale tipo dichiara di restituire ?

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [3 Dicembre 2023, 9:50pm UTC](https://it.discourse.mcneel.com/t/differenze-da-py-a-c/5603/26 "2023-12-03T21:50:12Z")

</div>

> [@emilio](#):
>
> Cioe’ nel primo caso hai un errore, mentre nel secondo no ?

esatto

> [@emilio](#):
>
> E quale tipo dichiara di restituire ?

`static object Mtd_GetCrvs()`  
ho messo **object** come return per le curve  
e non mi torna errore se nel **return**  
metto **Nothing** oppure **Failure** ecc

facendo delle prove mi è capitata questa combinazione per caso che ha funzionato. . .

[![](https://img.youtube.com/vi/b4297c7YQLA/hqdefault.jpg "Cose da pazzi - Cetto la Qualunque") ](https://www.youtube.com/watch?v=b4297c7YQLA)

```auto
return go.CommandResult()

```

```auto
return rh.Commands.Result.Nothing

```

osservandoli però anche se sono lo stesso tipo non credo si possa dire che siano la stessa cosa

correggimi se sbaglio, nel primo caso viene richiamato un Metodo nel secondo non credo. . .

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [3 Dicembre 2023, 10:07pm UTC](https://it.discourse.mcneel.com/t/differenze-da-py-a-c/5603/27 "2023-12-03T22:07:34Z")

</div>

Visto che si tratta di una **enum** , suppongo che per restituire un **object** ,C# usi il boxing:

> **[Boxing e unboxing - Guida per programmatori C# - C#](https://learn.microsoft.com/it-it/dotnet/csharp/programming-guide/types/boxing-and-unboxing)**
>
> Informazioni su boxing e unboxing nella programmazione C#. Vedere gli esempi di codice e visualizzare altre risorse disponibili.

Non conosco le regole della sintassi. Forse restituendo il risultato di un metodo il boxing non viene applicato.  
… Non ho idea … 😕

> [@0904](#):
>
> nel primo caso viene richiamato un Metodo nel secondo non credo. . .

Si’, sara’ quella la differenza che conta … ma, come dicevo, resto nel campo delle ipotesi …

Potresti provare con un cast a convertire il valore da restituire in **object**

```csharp
if ( go.CommandResult() != rh.Commands.Result.Success ) return (object)(go.CommandResult());

```

Non so se il secondo paio di parentesi aggiunte sia necessario, ma nel dubbio io provo a scriverle … 😀

> [@0904](#):
>
> ho messo **object** come return per le curve

Perche’ per le curve ?  
Vuoi dire per poter restituire sia Curve che Result ?

Quindi abbandoni sia le **tuple** che i parametri **out** e torni a usare C# come fosse Python.  
Se e’ quello che vuoi …

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [3 Dicembre 2023, 10:15pm UTC](https://it.discourse.mcneel.com/t/differenze-da-py-a-c/5603/28 "2023-12-03T22:15:19Z")

</div>

> [@emilio](#):
>
> Perche’ per le curve ?  
> Vuoi dire per poter restituire sia Curve che Result ?
> 
> Quindi abbandoni sia le **tuple** che i parametri **out** e torni a usare C# come fosse Python.  
> Se e’ quello che vuoi …

appena ho visto questo funzionamento fin’ora improbabile ho subito postato la notizia  
ma appena fatto alcune prove non credo che vada bene, essendo che poi nel primo  
Metodo che chiama il secondo Metodo, poi si ritrova con un oggetto Curva o Result  
e mi ritrovo con lo stesso problema nel primo Metodo quello che chiama  
essendo che se è un Oggetto non mi compara con il Result

provo il cast come mi hai chiesto e ti faccio sapere.

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [3 Dicembre 2023, 10:19pm UTC](https://it.discourse.mcneel.com/t/differenze-da-py-a-c/5603/29 "2023-12-03T22:19:52Z")

</div>

> [@0904](#):
>
> provo il cast come mi hai chiesto e ti faccio sapere.

Il cast serve se vuoi resituire un **object**.  
Se cambi idea e pensi di restituire qualcos’altro, lascia perdere il cast.

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [3 Dicembre 2023, 10:23pm UTC](https://it.discourse.mcneel.com/t/differenze-da-py-a-c/5603/30 "2023-12-03T22:23:58Z")

</div>

(cancellato la risposta di prima)

vabbè come non detto, ritorno all’ **out object** come parametro 👍

[Pagina precedente](https://it.discourse.mcneel.com/t/differenze-da-py-a-c/5603.md?page=1)
