Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  C# classi küsimus märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
mine lehele eelmine  1, 2
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
spreiii
HV kasutaja

liitunud: 27.12.2008




sõnum 27.03.2012 13:23:14 vasta tsitaadiga

Tekkis veel üks küsimus, millele ei suutnud vastust leida.
Oletame, et mul on koodis 2 public enum-i ning 1 klass. Kas on võimalik anda ühele muutujale A või B enum tüüp :
c#:
  1.     public enum A { ... }
  2.     public enum B { ... }
  3.  
  4.     public class Klass
  5.     {
  6.         ...
  7.         // Mida sooviks saavutada:
  8.         public A (või) B UusMuutuja { get; set; }
  9.     }

Või pole selline asi võimalik?
Kommentaarid: 23 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum
Ho Ho
HV Guru
Ho Ho

liitunud: 16.02.2002




sõnum 27.03.2012 14:12:37 vasta tsitaadiga

Et üks muutuja on kas tüüpi A või B? Genericutega saaks vast miskit kokku häkkida kuid eriti ilus see poleks.

Parem räägi mida sa täpselt saavutada üritad, küllap on paremaid lahendusi selleks.

_________________
Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity"
Kommentaarid: 106 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 86
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
spreiii
HV kasutaja

liitunud: 27.12.2008




sõnum 27.03.2012 15:43:22 vasta tsitaadiga

Ütleme nii, et see mida ma üritan saavutada pole tingimata vajalik, aga ma leian, et siis poleks nii palju kopeeritud koodi ühe ja sama ülesandega.
Mul on olemas 2 enum nimekirja, mille väärtused on vaja järjestada tähestikulises järjekorras. Kõik see on mul juba lahendatud, aga hetkel üritangi aru saada, et kas äkki oleks võimalik kahe erineva funktsiooni asemel kasutada hoopis ainult üht funktsiooni, kuhu siis annaks edasi vastava parameetri.

Sorteerimiseks kasutan hetkel sellist viisi, et mul on üks public void Sort funktsioon, kus koostan ArrayListi ja lisan kõik vastava enum-i väärtused sinna listi. Seejärel kasutan ühes klassis IComparer interface-i, mille initsialiseerin(?) selles Sort funktsioonis ning viin läbi list.Sort.

Need 2 enum-i on kasutusel kahes erinevas klassis, mis on tuletatud(?) ühest abstraktsest klassist. Ehk siis mu mõttekäik oli selline, et kui saaks tolle kahe klassi erinevate muutujate asemel (public A nimetus, public B nimetus) kasutada seda sama "nimetus" muutujat abstraktses klassis, mis siis oleks automaatselt määratud.

Väga-väga segane jutt tuli, kuid loodan, et on aru saada, mida ma üritan saavutada icon_biggrin.gif
Kommentaarid: 23 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum
neros
HV Guru
neros

liitunud: 26.11.2003




sõnum 27.03.2012 22:16:44 vasta tsitaadiga

public IEnumerable<T> Sort<T>(T enum) where T: SinuEnum1, SinuEnum2 {
... tee midagi
}


Kas ehk midagi sellist?

E: Testisin järgi, see töötab:

    class  Prog
    {
        enum MyEnum1
        {
            Foo,
            Bar
        }

        enum MyEnum2
        {
            Foobar,
            Baz
        }

        public void Run()
        {
            var enum1 = MyEnum1.Bar;
            var enum2 = MyEnum2.Baz;
            var i = Sort(enum1);
            var j = Sort(enum2);


        }

        public IEnumerable<T> Sort<T>(T t) where T : struct
        {
            return new List<T>();
        }
    }


Võid sinna vahele lisada kontrolle, a la stiilis:

if(t.GetType() != typeof(MyEnum1) || t.GetType() != typeof(MyEnum2))
throw new InvalidEnumArgumentException("Invalid Enum type");

_________________
GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt.
Kommentaarid: 48 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  C# classi küsimus mine lehele eelmine  1, 2
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.