Re: Variable und Instanz einer Klasse mit Gültigkeit für die gesam



Hallo Harald,

Das geht AFAIK nicht, Du kannst nicht in C# :
ref this Enum theEnum
in der "extension method" benutzen.

[...] Da ich in C# nicht ganz so fit bin wie Du, frage ich einfach mal sicherheitshalber zurück:

a) Kann man in C# generell einer Methode einen Enum nicht als Ref-Parameter übergeben?

Man *kann* einer (Nicht-Extension) "Methode"
einen "ref MyEnum" als Parameter angeben und der
wird auch geändert:

private void Form1_Load(object sender, EventArgs e)
{
MyEnum me = new MyEnum(); me = MyEnum.Eins;
Test(ref me); MessageBox.Show(me.ToString());
}

private void Test(ref MyEnum me)
{
me = MyEnum.Zwei;
}

enum MyEnum
{
Eins, Zwei, Drei
}
_________________



b) Kann man in C# einer static-Klasse generell einer Methode einen Enum nicht als Ref-Parameter übergeben?

Man *kann* einer statischen Methode in einer statischen
Klasse einen Enum als ref-Parameter übergeben (wie oben
ebenfalls funktional).

static class Test
{
static public void Start()
{
MyEnum me = new MyEnum(); me = MyEnum.Eins;
Testen(ref me);
MessageBox.Show(me.ToString());
}

static void Testen(ref MyEnum me)
{
me = MyEnum.Zwei;
}

enum MyEnum
{
Eins, Zwei, Drei
}
}
________________



c) Kann man in C# in einer static-Klasse einer Extension-Methode einen Enum nicht als Ref-Parameter übergeben?

Man kann das in C# *nicht* (IL-Tricks, dynamisches Emit mal ausgenommen).
Dann müsste man "ref this" etc. schreiben, das geht aber bei "Extension Methods"
in statischen Klassen in C# nicht. Im ersten Parameter einer Erweiterungsmethode
sind hier keine weiteren Modifizierer [..] zulässig.

[Compilerfehler CS1101]
http://msdn.microsoft.com/de-de/library/bb384258.aspx

Wenn Du also etwas wie folgendes hast:

public enum MyEnum
{
Eins, Zwei, Drei
}

public static class Extensions
{
public static void FromString(
this MyEnum theEnum, string fromString)
{
theEnum = (MyEnum)Enum.Parse(
theEnum.GetType(), fromString);
}
}
_________

wird beim Aufruf:

MyEnum me = new MyEnum();
me.FromString("Zwei");
MessageBox.Show(me.ToString());

"me" nicht (wie in VB.NET mit ByRef) geändert.


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

.



Relevant Pages

  • Re: Enums übergeben
    ... eine Variable vom Typ myEnum?? ... > Public Enum myEnum ... > Public Property Valueas Double ...
    (microsoft.public.de.german.entwickler.dotnet.vb)
  • =?ISO-8859-15?Q?Verst=E4ndnisproblem_Enums?=
    ... Ich wollte eine Enum bauen, ... einer Map und geb den Index im Konstruktor der Enum mit. ... public enum MyEnum ... Ich hab das Problem zwar jetzt gelöst, in dem ich in jedem Enum-Element ...
    (de.comp.lang.java)
  • =?Utf-8?Q?Enums_=C3=BCbergeben?=
    ... Public Enum myEnum ... Public Class myClass ... Public Sub New(ByVal myEnum As ) ... Public Property Valueas Double ...
    (microsoft.public.de.german.entwickler.dotnet.vb)
  • Re: Convert int to enum value
    ... enum MyEnum {INIT, WORKING, FINAL, COMPLETE}; ... } // end class EnumMap ...
    (comp.lang.java.programmer)

Loading