0

DateTime オブジェクトの文字列を解析しようとしています。そこに問題はありません:-)プロパティセットメソッドで直接実行しようとすると、私の問題が発生します。

私はこれができると思った:

        private DateTime _fromDate;
        public DateTime FromDate
        {
            get { return _fromDate; }
            set { _fromDate = DateTime.Parse(value); }
        }

しかし、私はこのエラーが発生します:

「引数 1: 'System.DateTime' から 'string' に変換できません」

それがまったくできるのであれば、誰でもこれを行う方法を知っていますか?

4

6 に答える 6

3

_fromDateタイプDateTimeです。

DateTime.Parseを取り、stringを返しますDateTime

value すでにaであり、へDateTimeの暗黙の変換はありません。DateTimestring

を直接解析する場合stringは、次のタイプDateTimeの新しいプロパティが必要になります。string

private DateTime _fromDate;
public string FromDate
{
    get { return _fromDate.ToString(); }
    set { _fromDate = DateTime.Parse(value); }
}

ただし、a)文字列のフォーマットをある程度制御し、b)入力文字列の安全性をチェックして、有効な日付でない場合に例外が発生しないことを確認する必要があります。

于 2012-05-25T08:55:06.563 に答える
2

プロパティのタイプはDateTime; 文字列を自分自身に変換しようとしても、文字列を値として渡すことはできませんDateTime

より専門的に言えば、このプロパティにより、クラスにメソッドが作成されます

public DateTime get_FromDate(DateTime value)
{
    // your property setter code here
}

このメソッドはDateTimeパラメーターを受け取り、それを変更する方法はありません。

文字列をaに変換する便利な方法をDateTimeクラスのユーザー(おそらく重要な処理を使用するもの)に提供したい場合は、変換をクラスのメソッドとして公開できます。ユーザーは毎回明示的に呼び出す必要がありますが、それが人生です。

于 2012-05-25T08:55:22.397 に答える
2

パラメータはすでにとして取得されているDateTimeため、解析する必要はありません。

本当に解析したい場合は、文字列に変換してください

set { _fromDate = DateTime.Parse(value.ToString()); }

しかし、これを行うと、日時を取得し、それを文字列に変換してから、日時に戻すことができます。これは...まあ、素晴らしいことではありません:)

于 2012-05-25T08:55:40.930 に答える
1

4 年間の死んだ馬を打ち負かすわけではありませんが、OP と同様の思考プロセスでこのスレッドに出くわし、このトピックに関する私の個人的な調査結果を要約したいと思いました。最終的に、既存のオブジェクトの DateTime プロパティを設定する場合は、事前に解析する必要があります (以前の回答が示唆しているように)。ただし、実際にはオブジェクトの初期化に関心があり、コンストラクターで解析されるテキスト値を渡すことが できます。

public class SomeClass
{
    public SomeClass(String date)
    {
        DateTime tmpDate;
        DateTime.TryParse(date, out tmpDate);
        if (tmpDate != DateTime.Minvalue)
        {
            FromDate = tmpDate;
        }
        else
        {
            throw new ArgumentError(("Unable to parse the input string " + date));
        }

私の特定のケースでは、DateTime プロパティを null 可能にしたかったので、解析を処理するメソッド ( here から取得) を作成する必要がありました (これは、コンストラクター内だけでなく外部でもデータを解析するために使用されます。例:

public class SomeClass
{
    public SomeClass(String date)
    {
        DateTime? tmpDate = this.TryParse(date);
        if (tmpDate.hasValue)
        {
            FromDate = tmpDate;
        }
        else
        {
            throw new ArgumentError(("Unable to parse the input string " + date));
        }
    }
    public DateTime? FromDate { get; set;}

    public DateTime? TryParse(string text)
    {
        DateTime date;
        if (DateTime.TryParse(text, out date))
        {
            return date;
        }
        else
        {
            return null;
        }
    }

明らかに、追加のコンストラクターを作成し、おそらく一致する型コンストラクターをデフォルトとして使用する必要があります。

于 2016-11-29T03:06:49.683 に答える
0

簡単な使用

private DateTime _fromDate;
public DateTime FromDate
    {
        get { return _fromDate; }
        set { _fromDate = value; }
    }

valueDateTimeプロパティが であるため、 になりますDateTime。誰かがこのプロパティを割り当てるDateTime objectと、 に入りvalueます。その値が割り当てられる Set で_fromDate

于 2012-05-25T09:03:41.443 に答える
0

DateTime.Parse(string s)string入力パラメーターを受け取りますvalueが、タイプは でDateTimeあり、暗黙的に に変換できないため、コンパイラ エラーが発生しstringます。

値はすでに であるため、値を解析する必要はありませんDateTime。したがって、コードを次のように変更できます。set { _fromDate = value; }

于 2012-05-25T09:00:28.090 に答える