How to check if Data is internalized in C#

Hi,

i would like to know how it is possible to check the GH document for internalized Data.
Is it possible to output it as List?
I was looking in the GH_Canvas class, not sure where to search for it.

Thanks!

List<object> intData = new List<object>();
    GH_Document doc = GrasshopperDocument;
    foreach(IGH_DocumentObject obj in doc.Objects){
      if(obj is IGH_Param){
        IGH_Param param = obj as IGH_Param;
        if(param.SourceCount > 0 || param.VolatileDataCount == 0)continue;
        intData.AddRange(param.VolatileData.AllData(true));
      }else if(obj is GH_Component){
        GH_Component comp = obj as GH_Component;
        foreach(IGH_Param param in comp.Params.Input){
          if(param.SourceCount > 0 || param.VolatileDataCount == 0)continue;
          intData.AddRange(param.VolatileData.AllData(true));
        }
      }
    }
    A = intData;

HI @Dani_Abalde,

thanks for the answer, its quite more complicated than i thought it was.
I tried to do something like that, getting a message below the component that shows that the input is internalized :

I will try it this weekend with a bit more time.

Gracias Dani, esta mas complicado que esperaba, lo que intentaba es que el mismo componente te da un mensaje si los datos estan internalizados. El fin de semana lo intentare de nuevo, como entre semana casi no tengo tiempo.

De todos modos muchas gracias.

Saludos desde la ciudad de mexico

//if (obj == System.Type(string) )
la variable ‘obj’ nunca será de tipo string, en este segmento de código ‘obj’ siempre será de tipo IGH_Param o heredados de este.
Lo que quieres hacer es comparar el tipo de dato que contiene el parámetro, no el parámetro en sí mismo, y eso se encuentra en param.VolatileData, pero es de tipo GH_Structure<T>, que es como el DataTree<T>.

//if string not contains "Referenced"
La palabra referenced pertenece a la descripción de instancia que da el parámetro, no la instancia del dato. Lo tienes en param.InstanceDescription.

Si lo que quieres es analizar componentes concretos en lugar de todos los componentes del documento, deberías usar sus InstanceGuid o conectarlo a este componente C#, algo como:

 foreach(IGH_Param source in this.Component.Params.Input[0].Sources){
      if(source.InstanceDescription.Contains("Referenced")){
        this.Component.Message = "Referenced";
      }else{
        this.Component.Message = "Internalized";
      }
    }

Hola Dani , muchas gracias por explicarlo con tanta paciencia.
El Grasshopper SDK es completamente nuevo para mi, asi que se me hace todavia dificil de seguir.
Como al principio con los rhinocommon:)
Estaba intentando de coser me una solucion de lo que me subiste de codigo.
No me dio mucho tiempo, para leer bien y tratar de entender todo lo que puedo aprender de tus ejemplos, ademas me di cuenta que tengo que refreshear la solucion con expire.Solution como me parece.
Mi idea era poner un comopnente en el canvas como el de bifocals por ejemplo que te avisa si tienes tus datos inernalizados o no,asi que se debe de chequear todos los componentes,como lo hiciste en tu primera solucion. Lo seguiere intentando cuando tenga mas tiempo, ya que me proporcionaste todo lo nesecario para poder solucionarlo.

Agradesco mucho tu ayuda!
Muchos Saludos!