Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Extending int

Postades av 2009-07-15 11:09:09 - Benny Testar, i forum c# (c-sharp), Tråden har 7 Kommentarer och lästs av 980 personer

Man kan lägga till functionalitet på en int enligt följande.

<code>
public static DayOfWeek DayOfWeek(this int theInt)
{
return (DayOfWeek) theInt;
}
</code>

Men jag försöker sätta värdet på int via en DayOfWeek. Följande fungerar ju inte. Och man får inte använda ref för functioner med this.

<code>
public static void DayOfWeek(this int? theInt , DayOfWeek tvalue)
{
theInt = ((int) tvalue);
}
</code>

Tester
<code>
[TestMethod]
public void FridayTest()
{
int? myInt = 5;

DayOfWeek week = myInt.DayOfWeek();

Assert.AreEqual(DayOfWeek.Friday , week);
}

[TestMethod]
public void MondayTest()
{
int? myInt = null;

myInt.DayOfWeek(DayOfWeek.Monday);

// This fails
Assert.AreEqual(myInt, 1);
}
</code>

Någon som vet hur man gör?!



Svara

Sv: Extending int

Postades av 2009-07-15 12:11:14 - Niklas Jansson

Extension Methods får väl bara läggas på vanliga metoder? Det tyder ju lite på att MS inte riktigt kände att de ville göra klart det konceptet helt och hållet än.

Det du skulle kunna göra är att returnera en ny klass, DayOfWeekToInteger, som håller en referens till en int eller bli tilldelad en DayOfWeek. Problemet är att man väl inte får lov att hålla referenser till valueobjects i C#?


Svara

Sv: Extending int

Postades av 2009-07-15 12:26:17 - Benny Testar

Tills vidare använder jag följande implementation..

<code>
[Obsolete("This function is obsolete; use = (int)dayOfWeek")]
public static void DayOfWeek(this int? theInt , DayOfWeek dayOfWeek)
{
throw new Exception("This function is obsolete; use = (int)dayOfWeek");
}
</code>

Fast det kanske inte kan räknas som en optimal lösning :-)


Svara

Sv:Extending int

Postades av 2009-07-16 11:44:02 - Peter Hageus

Int är en värdetyp, och alltså immutable, den kan inte tilldela ett värde till sej själv, du måste returnera en ny int.


Svara

Sv: Extending int

Postades av 2009-07-16 23:33:49 - Niklas Jansson

Vänta nu... Variabeln som innehåller en int går definitivt att tilldela till. Problemet är egentligen bara att det inte går att få en referens/pekare till den variabeln, och att det inte via kod går att få fram att variabeln "i" är något annat än konstanten "5". Sen stämmer ju förstås det du skriver.

Jag tycker nog att den här biten är väldigt inelegant i .net-språken, och är bra mycket mer logisk i, säg, C++.

Det är ju en ganska artificiell uppdelning i "värde" vs "objekt".


Svara

Sv:Extending int

Postades av 2009-07-17 10:45:58 - Peter Hageus

Jo, givetvis går det att tilldela till variabeln, klumpigt skivet av mej.

Det klassiska exemplet är väl String.Replace(), att den inte opererar på strängen, utan returnerar en ny.

I ditt fall hade jag nog gjort extensionmethods enligt Int.ToDayOfWeek() samt DayOfWeek.ToInt() eller något ditåt...


Svara

Sv: Extending int

Postades av 2009-07-17 13:02:02 - Niklas Jansson

Sitter faktiskt precis med just dayofweek fram och tillbaks till integer. Jag har valt att inte göra så mycket snygglösningar, bland annat på grund av detta. Har istället en CalendarFunctions.GetDayOfWeekNumber()

Inte lika snyggt, men när jag känner att det är mer logiskt eftersom CalendarFunctions förmodligen kommer bytas ut, och på något sätt känns det bättre att inte vara så hårt kopplad till DayOfWeek (den numrerar ju dagarna "fel" enligt svensk standard).

Sen undviker jag extension methods tills alla inblandade är införstådda med dem också.


Svara

Sv:Extending int

Postades av 2009-07-18 20:36:31 - Roger Alsing

>>Inte lika snyggt, men när jag känner att det är mer logiskt eftersom CalendarFunctions förmodligen kommer bytas ut,

Jag tycker det är en betydligt snyggare lösning eftersom den inte kräver att du redan har en tilldelad(/nullad) integer för att kunna få fram en veckodag.

Om en extensionmetod helt ignorerar innehållet av "this" parametern så är det ju ett tecken på att något är feldesignat.

[edit]
Såg att förslaget med extensionmetod på enumtypen redan var taget så jag raderar resten av min post :-)


Svara

Nyligen

  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak
  • 16:14 Vem anlitar man egentligen när tak
  • 16:13 Vem anlitar man egentligen när tak
  • 11:52 Noen erfaring med uttak hos Mostbe
  • 11:51 Noen erfaring med uttak hos Mostbe

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 635
27 958
271 741
514
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies