• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    TENCOKACISTROMYProgramovani v C#, F# a dalsich jazycich pro .NET, Mono a ostatni CLI implementace
    WEWERKA
    WEWERKA --- ---
    RORSCHACH: To je zalezitost ovladaciho sw UCCNC https://cncdrive.com/UCCNC.html. Ten pracuje s controlery http://www.shop.cncdrive.com/index.php?categoryID=114 a ty si muzes dat kam potrebujes. Ja konkretne mam kupovane reseni od Stepcraftu a to model M.
    LARS_GUNNER
    LARS_GUNNER --- ---
    RORSCHACH: To bude CNC#
    RORSCHACH
    RORSCHACH --- ---
    WEWERKA: můžu se zeptat, co je to za stroj? jsem netušil, že jsou nějaký CNC s podporou C# :)
    WEWERKA
    WEWERKA --- ---
    Tak to zabralo. Jeste jednou diky.
    WEWERKA
    WEWERKA --- ---
    SLUPKA, TOOMIX: Aha, to zni logicky. Diky, zitra (dneska) vyzkousim a dam vedet.
    TOOMIX
    TOOMIX --- ---
    TOOMIX: případně ten else vyhodit, když se nastaví výchozí hodnota 0 při deklaraci proměnné
    TOOMIX
    TOOMIX --- ---
    WEWERKA: deklaruješ tam 2x proměnnou Yorigpospark (podruhé v else), takže takhle nějak to má vypadat, nadeklarovat před if-else a pak použít.

    double Yorigpospark = 0;
    if(exec.GetYmachpos()>(ToolY[1] + Ytooloffset)) 
    {
       Yorigpospark = exec.GetYmachpos();
       exec.Code("G00 G53 Y" + (ToolY[1] + Ytooloffset));
       while(exec.IsMoving()){};
    } 
    else 
    {
       Yorigpospark = 0;
    }
    SLUPKA
    SLUPKA --- ---
    WEWERKA: Nelze mít to druhé místo proměnnou také s typem před názvem (= je třeba odebrat to double). Takhle se pokoušíte dvakrát vytvořit novou proměnnou se stejným jménem.
    WEWERKA
    WEWERKA --- ---
    Ahoj, mam v uccnc makra na obsluhu cnc, pry to pouziva C# a narazila jsem tam na jednu vec, ktere nerozumim. Pokousim se tam definovat promennou, ale C# ji bud nezna nebo se brani redefinici. S C# jsem nikdy nepracovala, tak pardon za zrejme blby dotaz.

    if(exec.GetYmachpos()>(ToolY[1] + Ytooloffset)) {
    double Yorigpospark = exec.GetYmachpos();
    exec.Code("G00 G53 Y" + (ToolY[1] + Ytooloffset));
    while(exec.IsMoving()){};
    } else {
    double Yorigpospark = 0;
    }

    Pri pozdejsim vypsani obsahu hlasi, ze "Název Yorigpospark v aktuálním kontextu neexistuje." Pritom jine promenne, ktere nacitaji exec.GetYmachpos() hodnotu zobrazi.

    Kdyz zkousim variantu

    double Yorigpospark = 0;
    if(exec.GetYmachpos()>(ToolY[1] + Ytooloffset)) {
    double Yorigpospark = exec.GetYmachpos();
    exec.Code("G00 G53 Y" + (ToolY[1] + Ytooloffset));
    while(exec.IsMoving()){};
    }

    dostavam hlasku "V tomto oboru nelze deklarovat lokální proměnnou s názvem Yorigpospark, protože by došlo k posunutí významu názvu Yorigpospark, který je již v oboru nadřazený nebo aktuální prvek použit jiným způsobem."
    SIRLOON
    SIRLOON --- ---
    PELDA: ale to “y” si radeji zmen, nebo ti pancelka snizi znamku za upravu 😉
    PELDA
    PELDA --- ---
    EMBI:
    MORMEGIL: Diky obema za nasmerovani... vyreseno! Missing part byl ten cast z object na IEnumerable

    FYI tohle funguje (GetPropertyValue mam napsane jako Reflection podobne jako EMBI: )

    MORMEGIL
    MORMEGIL --- ---
    PELDA: List<T> není nijak variantní, takže bez dostupnosti toho typového parametru s tím nijak nepochodíš. Můžeš to přetypovat prostě na negenerický IList (protože List<T> implementuje i negenerický IList), takže s tím pak můžeš pracovat rozumně jako se seznamem objektů. Pokud by ten DataColumnProducer měl nějakého veřejně dostupného užitečného předka, dá se to taky přetypovat na IEnumerable<Předek> (protože IEnumerable je kovariantní). (Jestli nemá, tak samozřejmě můžeš na IEnumerable<object>, ale to nemá proti negenerickému IList žádnou výhodu, řekl bych.)
    EMBI
    EMBI --- ---
    PELDA: Muze byt treba takto?


    class Program
    {
        static void Main(string[] args)
        {
            MyClass m = new MyClass();
    
            PropertyInfo? prop = m.GetType().GetProperty("PrivateList", BindingFlags.Instance | BindingFlags.NonPublic);
    
            Assembly assembly = Assembly.GetExecutingAssembly();
            Type subType = assembly.GetTypes().First(t => t.FullName.EndsWith("PrivateSubClass"));
    
            object? obj = prop.GetValue(m);
            foreach (object item in (IEnumerable)obj)
            {
                object? x = subType.GetField("x", BindingFlags.Instance | BindingFlags.Public).GetValue(item);
                Console.WriteLine(x);
            }
        }
    }
    
    class MyClass
    {
        private List<PrivateSubClass> PrivateList { get; } = new List<PrivateSubClass>()
        {
            new PrivateSubClass() { x = 0 },
            new PrivateSubClass() { x = 1 },
        };
    
        private class PrivateSubClass
        {
            public int x;
        }
    }
    PELDA
    PELDA --- ---
    PELDA: abych to trochu zobecnil...

    Jak udelat List, kde T je type, ktery ziskam pomoci Reflection?

    Zkousel jsem neco jako

    Assembly design = Assembly.LoadFile(@"C:\Program Files (x86)\TIBCO\Spotfire\11.4.0\Binaries\Spotfire.Dxp.Data.dll");
    Type myColumnProducer = design.GetType("Spotfire.Dxp.Data.DataColumnProducer");

    ale potom List ... hazi " myColumnProducer is a variable but is used like a type...
    PELDA
    PELDA --- ---
    Ahoj ... potreboval bych poradit s Reflection a Non-public members... nejak jsem se zasekl
    (sorry predem za dlouhy post)

    Mam object "dataTable", ktery ma skrytou property AllProducersExcludingFrozenChildren.
    Takze pouziju Reflection:

    var myProducers = dataTable.GetType().GetProperty("AllProducersExcludingFrozenChildren", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(dataTable, null);

    Jenze to, co dostanu je typu object {System.Collections.Generic.List}, takze nemuzu k items pristupovat pres myProducer[0] nebo nejak iterovat.

    Nabizi se to precastovat na System.Collections.Generic.List, coz by jit melo, jenze typ Spotfire.Dxp.Data.DataColumnProducer je zase Non-public. A jak udelat List z type, ktery nejak ziskam pomoci Reflection neumim, resp. mi nic nefungovalo... :(

    Celkove nemam s dynamickou praci s typy moc zkusenosti, tak snad se neptam uplne blbe.
    Kazdou radu vitam:)

    PJOTRIK
    PJOTRIK --- ---
    Mam tu kupon na 3mesicni licenci JetBrains dotUltimate, pokud byste nekdo mel zajem tak posta, ja to nevyuziju
    SAJAGI
    SAJAGI --- ---
    TOOMIX: F# opět
    TOOMIX
    TOOMIX --- ---
    The New Constructor Type Coming in C# 12 is Weird
    https://www.youtube.com/watch?v=hcCT5J-SKEA&t=288s


    BRAP242
    BRAP242 --- ---
    OTAVA: spatne (vicenasobne) instancovanej logger
    OTAVA
    OTAVA --- ---
    Ahoj,

    mam takovy problem - mam servisu, ktera ma nejaky endpointy a natahuje data z DB, naprosto standardni vec a na projektu jich mame cca 10. Strukrura vicemene stejna.

    Ted jsem si vsiml ze tahle konkretni servisa loguje kazdou hlasku dvakrat - pouzivame log4net. Kdyz to debuguju, vidim skutecne dve instance loggeru. ve startupu nevidim nic podezdreleho, logger se injectuje pres DI.

    Uz jste nekdy neco podobneho videli ?
    (google and stockoverflow nepomohly)

    Diky moc.
    Kliknutím sem můžete změnit nastavení reklam