Frage

Ich habe die folgenden Variablen:

string str1 = "1";
string str2 = "asd";
string str3 = "3.5";
string str4 = "a";

Jetzt muss ich den Datentyp jedes Strings das heißt den Datentyp finden, auf die sie umgewandelt werden können, wenn Anführungszeichen entfernt werden. Hier ist, was würde ich jede Variable wie zu konvertieren:

  

str1 - integer
  str2 - String
  str3 - Doppel-   str4 - char

. Hinweis: wenn die Zeichenfolge einzelnes Zeichen hat, sollte es sein, char, wenn ein String einzelnen Buchstaben haben kann, ich sie einzuschränken

Zur Info: diese Werte werden von Datagrid erhalten wird, wo i Werte manuell eingegeben werden. Also alles wird zu einem String. Gibt es eine Möglichkeit, dies zu tun?

War es hilfreich?

Lösung

Verwenden Sie Meta-Daten , wenn Sie können

Dass Sie haben zu erraten, was die Datentypen sind, ist keine gute Idee.

Zwei Dinge

1 Wo werden die Daten kommen aus?

Wenn es eine Datenbank, sind Sie sicher, dass sie Strings sind? Wenn es sich um eine Datenbank, sollte es einige Meta-Daten werden zurückgegeben, die wird Ihnen sagen, was die Datentypen der Felder sind.

Wenn es sich um eine XML-Datei ist, gibt es ein Schema definiert, dass Sie die Typen geben werden?

2 Wenn Sie den Vorgang fortsetzen müssen zu erraten.

Beachten Sie, dass Sie Zeichenfolgen haben kann, die Zahlen zufällig sein, sind aber absolut gültige Strings beispielsTelefonNummern, Bankkonto-Nummern, die am besten als Strings ausgedrückt sind. Auch können diese Zahlen viele Stellen haben, wenn Sie sie verdoppelt konvertieren können Sie einige Ziffern Gleitkomma Ungenauigkeiten verlieren (Sie sollten bis zu 14 oder 15 Stellen in Ordnung sein)

Ich bin sicher, dass jetzt - weil ich meine Zeit schreibe dies genommen haben - es gibt viele Antworten sagen Ihnen, wie dies zu tun (dh TryParse erste int, dann doppelt, dann für char Testlänge, wenn nicht, dann ist es ein String, etc.), aber wenn ich du wäre, ich das nicht tun würde versuchen, und sehen, ob es eine Möglichkeit gibt, können Sie bekommen, oder einige Meta-Daten übergeben, die Ihnen sagen, was es Typ ist und nicht nur welche Art es Macht sein

Andere Tipps

Natürlich gibt es keine bestimmte Art und Weise, dies zu tun, aber wenn Sie eine Liste der Datentypen erstellen möchten Sie nach Priorität geordnet zu überprüfen, dann so etwas wie dieses kann den Trick tun.

object ParseString(string str)
{
    int intValue;
    double doubleValue;
    char charValue;
    bool boolValue;

    // Place checks higher if if-else statement to give higher priority to type.
    if (int.TryParse(str, out intValue))
        return intValue;
    else if (double.TryParse(str, out doubleValue))
        return doubleValue;
    else if (char.TryParse(str, out charValue))
        return charValue;
    else if (bool.TryParse(str, out boolValue))
        return boolValue;

    return null;
}

Rufen Sie diese Funktion auf jeder Saite, und Sie sollen die sachgemäße Art von Objekt zurückgegeben haben. Eine einfache Typprüfung kann man dann sagen, wie die Zeichenfolge analysiert wurde.

Mit der TryParse Methode für jeden Typ.

Es gibt keine in Art und Weise gebaut, dies zu tun, Sie TryParse auf Nummerntypen mit Präzision zu erhöhen versuchen könnten, aber es wäre es nicht zu garantieren, Recht zu sein.

Ihre beste Wette, was sein, es zu verarbeiten, wie Sie es manuell. d Gibt es eine Dezimalstelle? Nein - dann seine eine ganze Zahl. Wie groß? Ist es negativ?

Der Datentyp für jedes dieser Elemente ist String. Wenn Sie möchten, um zu versuchen, sie in verschiedene Arten zu analysieren, können Sie verwenden Int32.TryParse, Double.TryParse usw. Oder Sie können Regex verwenden:

bool isInt = new Regex(@"^\d+$").IsMatch(str);
bool isDouble = !(isInt) && new Regex(@"^\d+\.\d+$").IsMatch(str);
bool isChar = !(isInt || isDouble) && new Regex(@"^.$").IsMatch(str);
bool isString = !(isInt || isDouble || isChar);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top