Abgeteilt von JavaScript-Code in C# umwandeln: Funktion, die Zahl erwartet, kann auch mit String aufrufen werden
blöd, dass sich jetzt das Threadthema so speziell in eine Richtung gelenkt wurdet, eigentlich ging es mir allgemein um die Übersetzung Javascript <-> C#
Nein, gar nicht blöd. Wenn neben [Hinweis] Wie poste ich richtig? Punkt 3 (aussagekräftige, konkrete Titel) auch Punkt 1.2 (nur ein Thema pro Thread) beachtet wird, wird es im Gegensatz viel übersichtlicher, gerade für Leute, die später die Forensuche benutzten und dann statt fünf langen, unübersichtlichen, verzahnten und wenig erhellend benannten "Übersetzung Javascript <-> C#"-Threads besser 30 kurze, übersichtliche, unverzahnte sehen, bei denen sie direkt im Titel erkennen können, ob das Thema relevant ist.
Ich versuche gerade die Funktion typeof von JavaScript nachzubauen und kann euch dazu folgende Info zukommen lassen:
Mögliche Rückgabewerte der typeof Funktion sind:
boolean (Ja/Nein-Variable),
string (Zeichenkettenvariable),
number (numerische Variable),
function (Funktion),
object (Objekt),
undefined (unbestimmter Typ).
public string GetJavaScriptType(object o)
{
Type type = o.GetType();
if(type==typeof(string))
return "string";
if(type==typeof(bool))
return "boolean";
if(type==typeof(object))
return "object";
// return "function";
if(double.TryParse(o.ToString(),out 0))
return "number";
return "undefined";
}
Wie könnte man den Rückgabewert "function" lösen und kann man "number" besser bestimmen als mit meiner Methode?
Edit: blöd, dass sich jetzt das Threadthema so speziell in eine Richtung gelenkt wurdet, eigentlich ging es mir allgemein um die Übersetzung Javascript <-> C#
Was genau macht denn Dein Javascript?
Eine Übersetzung zu übersetzen erinnert mich an
einen Ofen in einem Ofen, um backen zu können während man backt.
Erwünschte Anwendung -> Javascript, Javascript->C#
Kann man einfacher lösen durch:
Erwünschte Anwendung -> C#
Vielen Dank für das Aufsplitten der Threads und für deine Antwort Colo.
Die Prozedur das Javascript nachzubauen steht fest. Da gibt es nichts dran zu rütteln. Ich bin sebst nicht sonderlich froh drüber, aber so soll es gemacht werden.
Das macht doch keinen Sinn.
Du sollst sicherlich die Funktionalität nachbauen und dazu musst du nicht jede Zeile "übersetzen" sondern den Sinn.
Und in .NET gibt es weit aus mehr typen, aber das wird her sicher nicht benötigt.
Wozu wird denn diese Funktion benötigt?
Um krampfhaft OOP in JS zu machen?
Prinzipiell ergibt das Ganze keinen Sinn, deswegen ist es auch notwendig, Zeile für Zeile zu übersetzen. Hinzu kommt, dass das Skript minimized und teilweise obfuscated wurde, was die Sache noch verkompliziert.
Es kommt bei der Funktion von oben nicht daraufan, jeden Typ von .NET zurückzugeben, sondern die von Javascript als string. Im Javascript gibt es dafür eine spezielle Funktion, die ich mit C# nachbauen muss, da später im Skript Abfragen auf a == "function" getätigt werden.
Über den Sinn ist ja oben spekuliert worden.
Hast du dir im übrigen schonmal Script# angeschaut? http://projects.nikhilk.net/ScriptSharp/
Ih glaube ihr erfindet das Rad nochmal neu.
Dein Code funktioniert aber so nicht.
if(type==typeof(object))
return "object";
Wird nur dann "object" zurückgeben, wenn das Object wirklich von Basis Datentyp object ist:
object o = new object();
Für alle anderen Objekte wird deine Funktion "undefined" zurückliefern.
Zu function:
In Javascript kann ich ja sowas schreiben:
var func = function() { //... };
Was dem in C# am nächsten kommt sind Delegaten. Aber ob dann das dann der Sinn der Sache ist?
Wie oben schon geschrieben, schaut euch mal Script# an, ist vielleicht genau das was ihr braucht.
using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}
Im Javascript gibt es dafür eine spezielle Funktion, die ich mit C# nachbauen muss, da später im Skript Abfragen auf a == "function" getätigt werden.
Bevor du anfängst, Javascript-Bibliotheken "nachzucoden", solltest du sie lieber direkt in C# nutzen.
Siehe als Anregung: Are there any .NET CLR/DLR implementations of ECMAScript?