none
文字列で指定されたデータ型に変換するには RRS feed

  • 質問

  • string dataType = "System.DateTime";
    string value = "2014/01/01";
    
    System.DateTime date = MyConverter(value, dataType);

    上述のように文字列で指定されたデータ型に、文字列を変換させる方法はありますか?

    自作して変換用のメソッド(MyConverter)を作成して対処してますが、自作せずに.NETに用意されている方法はありますか?

    2014年2月2日 18:47

回答

  • そういう目的であれば、1つ1つの値・メンバーを個別に扱うのではなく、Settings(クラス)全体をシリアル化することをお勧めします。

    .NET Frameworkにはこれを支援する機能として、

    が用意されています。最初の2つは.NETクラス←→XML形式の双方向変換で、もちろんXMLということは文字列として扱えます。3つ目はバイナリ形式なのでbyte[]として扱うことになりますが内容にこだわらなければそれでもかまわないと思います。1つ目はXML形式の他にバイナリ形式、JSON形式を使用することもできます。

    2014年2月4日 23:23

すべての返信

  • 技術的には可能ですが、その結果をどう受け取るのでしょうか? 挙げられているコードも System.DateTime型の date 変数に代入しているわけで、つまり文字列に依らずコンパイル時にSystem.DateTime型であることは確定しているのではありませんか?
    • 回答の候補に設定 星 睦美 2014年2月5日 5:02
    2014年2月2日 22:46
  • int MyConverter(string value, string dataType)

    string MyConverter(string value, string dataType)
    は共存できないないのですか、
    その自作メソッドはどんなシグネチャーですか?


    • 編集済み galaco 2014年2月3日 0:14
    2014年2月3日 0:13
  • 自作して変換用のメソッド(MyConverter)を作成して対処してますが、自作せずに.NETに用意されている方法はありますか?

    MyConverterはどのような実装になっているのでしょうか? ParseメソッドやConverterクラスを利用されているのでしょうか? であれば、それらを直接利用するだけで十分だと思いますが、どのような目的でMyConverterを作成されたいのでしょうか? つまり、値および型をstringのパラメーターで受け取り、変換結果を返すような汎用的なメソッドの必要性は高くないと思うのですが・・・


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2014年2月3日 4:56
    モデレータ
  • ご回答ありがとうございます。

    もう少しやりたいことを具体的に申し上げますね。

    ホームページとの連係で利用する目的で、Microsoft SQL Serverのデータベースにアプリケーションの設定値を保存しようとしています。例えば日付形式の単一のデータ(RDBで扱うような複数の行ではなく単にその値だけ)などを保存するために次のようなテーブルを作成しました。

    テーブル名:Settings
    カラム名:ID(int), KeyName(nvarchar(20)), Value(nvarchar(100))

    このテーブルにデータを保存するときに、例えば、KeyNameを「DateA」、Valueを「2014/1/1」などと文字列として保存します。

    次にその値を取得するときに、KeyName「DateA」に一致するValueを取得しています。KeyName「DateA」というのは、仕様上System.DateTime型の形式が入っているとわかるので、取得したあとにSystem.Convert。ToDateTime()で文字列をDateTime型に変換してしまえば終わりなのですが、

    ここで、もし、DateType(nvarchar(100))みたいなカラムを設置して、「System.DateTime」という文字列を保持し、元の質問のように変換できるなら、実装段階で変換型の選択ミスをするなどのリスクを軽減できるかな?と思って質問させていただきました。

    確かにご指摘のようにそれを変換したとして、どのように取得した値を受け取るのかは考えていませんでした。当初はジェネリックスで型指定して...と考えてましたが、そこで型指定するなら、本末転倒ですね。

    もう少し仕様を考え直したいと思います。

    また、上述のようにSQL Serverで単一のデータを保存する手法については新たに別スレッドをたてて再度質問させていただきます。

    ご回答くださいました皆様ありがとうございました。

    2014年2月4日 18:49
  • そういう目的であれば、1つ1つの値・メンバーを個別に扱うのではなく、Settings(クラス)全体をシリアル化することをお勧めします。

    .NET Frameworkにはこれを支援する機能として、

    が用意されています。最初の2つは.NETクラス←→XML形式の双方向変換で、もちろんXMLということは文字列として扱えます。3つ目はバイナリ形式なのでbyte[]として扱うことになりますが内容にこだわらなければそれでもかまわないと思います。1つ目はXML形式の他にバイナリ形式、JSON形式を使用することもできます。

    2014年2月4日 23:23
  • フォーラム オペレーターの星 睦美です。

    あくあれっど さん、こんにちは。
    フォーラムの回答者からの返信が検討の参考になったようですね。
    私のほうで佐祐理 さんの返信を[回答の候補に設定] させていただきました。

    参考になった返信には、投稿者から[回答としてマーク] いただければ幸いです。


    ※今回の質問から新しいスレッドが作成されましたのでリンクしておきます。

    ・SQL Serverに設定値などの単一のデータを保存するには?
    http://social.msdn.microsoft.com/Forums/ja-JP/93760ccd-e30f-48bb-a27b-cf694ed72ff1/sql-server?forum=csharpgeneralja


    フォーラム オペレーター 星 睦美 - MSDN Community Support


    • 編集済み 星 睦美 2014年2月5日 5:07 編集
    2014年2月5日 5:02