質問

次の変数があります:

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

今、各文字列のデータ型、つまり引用符が削除された場合に変換できるデータ型を見つける必要があります。各変数の変換先を以下に示します。

  

str1-整数
  str2-文字列
  str3-double
  str4-文字

注:文字列に単一の文字が含まれる場合は、文字にする必要がありますが、文字列には単一の文字を含めることができますが、制限しています。

FYI:これらの値は、手動で値を入力したDataGridから取得されます。だから、すべてが文字列になっています。 これを行う方法はありますか?

役に立ちましたか?

解決

メタデータを使用(可能な場合)

データ型が何であるかを推測する必要があるのは、良い考えではありません。

2つのこと

1データの送信元はどこですか?

データベースの場合、文字列であると確信していますか? データベースの場合、フィールドのデータ型が何かを示すメタデータが返されるはずです。

Xmlファイルの場合、型を提供するスキーマが定義されていますか?

2推測を続ける必要がある場合。

文字列はたまたま数字である可能性がありますが、文字列として表現するのが最適な電話番号、銀行口座番号など、完全に有効な文字列であることに注意してください。 また、これらの数値には多くの桁が含まれている可能性があり、それらを倍精度に変換すると、一部の桁が浮動小数点の不正確に失われる可能性があります(14桁または15桁までは問題ありません)

私は間違いなくこれを入力するのに時間をかけたので、これを行う方法を教えてくれる答えがたくさんあります(つまり、最初にintを解析し、次にdouble、charの長さをテストし、そうでない場合は文字列など)、しかし、私があなただったら、私はそれをしないようにして、あなたが得ることができる方法があるかどうかを確認するか、それをタイプするかを伝えるいくつかのメタデータを渡します IS そして、タイプするだけでなく、可能性がある

他のヒント

もちろん、これを行う明確な方法はありませんが、優先度順にチェックしたいデータ型のリストを作成する場合、このようなことがうまくいくかもしれません。

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;
}

各文字列でこの関数を呼び出すだけで、適切なタイプのオブジェクトが返されます。単純な型チェックにより、文字列がどのように解析されたかがわかります。

各タイプの TryParse メソッドを使用します。

これを行う方法は組み込まれていません。精度を上げて数値型でTryParseを試すことはできますが、正しいことを保証するものではありません。

手動で処理するのと同じように処理することをお勧めします。つまり、小数点以下の桁はありますか?いいえ-整数です。どれくらい大きい?負の値ですか?

これらの各項目のデータ型は文字列です。それらを異なるタイプに解析したい場合は、Int32.TryParse、Double.TryParseなどを使用できます。または、正規表現を使用できます。

bool isInt = new Regex(@"^\d+<*>quot;).IsMatch(str);
bool isDouble = !(isInt) && new Regex(@"^\d+\.\d+<*>quot;).IsMatch(str);
bool isChar = !(isInt || isDouble) && new Regex(@"^.<*>quot;).IsMatch(str);
bool isString = !(isInt || isDouble || isChar);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top