入力データの検証を get;set; に移動しようとしています。クラス構造体の。
public void PlotFiles()
{
List<DTVitem.item> dataitems;
DTVitem.item i;
DateTime.TryParse("2012/01/01", out i.dt);
DateTime.TryParse("04:04:04", out i.t);
int.TryParse("455", out i.v);
dataitems.Add(i);
}
構造体は別のクラスで宣言されています (おそらく不要です)。
public partial class DTVitem
{
public struct item
{
public DateTime dt;
public DateTime t;
public int v;
}
}
DTVitem.item.dt
、DTVitem.item.t
、またはを設定するたびにDTVitem.item.v
、関連することを実行し.TryParse()
てプロパティの内容を検証したいと考えています。
ただし、次のように TryParse() を使用しようとすると ( MSDN のこの例に頭を悩ませようとしています):
public partial class DTVitem
{
private DateTime _datevalue;
public string dt
{
get { return _datevalue; }
set { DateTime.TryParse(value, out _datevalue) ;}
}
}
というエラーが表示され_datevalue is a DateTime and cannot be converted to a string
ます。その理由は明らかに、戻りパスがdt
このインスタンス ( a string
) の型を返さなければならないからです。ただし、これをいくつかの異なる方法でマッサージしようとしましたが、ハッキングできません。
値を構造体のインスタンスのプロパティとして設定するときに、string
値を として検証するという目標を達成するにはどうすればよいですか?DateTime
set
私が最善の方法を試みているように使用していますか?
get;set; を使用することには多くの価値があることがわかります。検証のために、本当にそれを理解したいです。
どうもありがとう、
マット
[編集]
私のやり方の誤りを指摘してくれた以下のJon Skeetに感謝します。
変更可能な structs の問題に関する別のスレッドと、 structのインスタンス化について話している別のスレッドがあります。注意構造体は値型です。
彼が指摘していたことの残りの部分は、構造体を遠くに埋める必要はないということに同意しているだけだと思います。なぜそうしているのかを確認する必要があります。
[解決]
以下のいくつかの推奨事項を考慮して、次のことを考え出しました。
public partial class DTVitem
{
private DateTime _dtvalue, _tvalue;
private int _vvalue;
public string dt
{
get { return _dtvalue.ToString(); }
set { DateTime.TryParse(value, out _dtvalue); }
}
public string t
{
get { return _tvalue.ToString(); }
set { DateTime.TryParse(value, out _tvalue); }
}
public string v
{
get { return _vvalue.ToString(); }
set { int.TryParse(value, out _vvalue); }
}
}
プログラム クラス内で、次のようにインスタンス化して設定しました。
DTVitem item = new DTVitem();
item.dt = "2012/01/01";
item.t = "04:04:04";
item.v = "455";
そこで、構造体ではなくクラスを使用することにしました。または実際にはクラスのインスタンス。