3

ネット上でこれを理解するのに役立つものを見つけることができません.誰かが助けてくれれば、あなたは命の恩人になるでしょう.

私の関数には、プロパティ名とオブジェクトが与えられます。リフレクションを使用して、そのプロパティの値を返します。それは完全に機能しますが、Nullable DateTime を渡すと null が返され、何を試しても機能しません。

public static string GetPropValue(String name, Object obj)
{
 Type type = obj.GetType();
 System.Reflection.PropertyInfo info = type.GetProperty(name);
 if (info == null) { return null; }
 obj = info.GetValue(obj, null);
 return obj.ToString();
 }

上記の関数で obj は null です。DateTime を読み取るにはどうすればよいですか?

4

3 に答える 3

2

あなたのコードは問題ありません-これは時刻を出力します:

class Program
{
    public static string GetPropValue(String name, Object obj)
    {
        Type type = obj.GetType();
        System.Reflection.PropertyInfo info = type.GetProperty(name);
        if (info == null) { return null; }
        obj = info.GetValue(obj, null);
        return obj.ToString();
    }

    static void Main(string[] args)
    {
        var dt = GetPropValue("DtProp", new { DtProp = (DateTime?) DateTime.Now});
        Console.WriteLine(dt);
    }
}

null 値の例外を回避するには、最後の行を次のように変更しますGetPropValue

return obj == null ? "(null)" : obj.ToString();
于 2012-06-05T18:34:05.547 に答える
1

これは私にとってはうまくいきます。

PropertyInfoがnull以外を返していることを確認しますか?

class Program
{
    static void Main(string[] args)
    {
        MyClass mc = new MyClass();
        mc.CurrentTime = DateTime.Now;
        Type t = typeof(MyClass);
        PropertyInfo pi= t.GetProperty("CurrentTime");
        object temp= pi.GetValue(mc, null);
        Console.WriteLine(temp);
        Console.ReadLine();
    }

}
public class MyClass
{
    private DateTime? currentTime;

    public DateTime? CurrentTime
    {
        get { return currentTime; }
        set { currentTime = value; }
    }
}
于 2012-06-05T18:48:42.740 に答える
0

null 許容型は 型であり、と のNullable<T>2 つのプロパティがHasValueありValueます。最初にが設定されHasValueているかどうかを確認する必要がありValueます。その後、 から実際のデータにアクセスできますValue

指定されたオブジェクトが であるかどうNullable<T>GetPropValueかを確認して でこれらのチェックを行うか、このメソッドの外部でこのロジックを実行して、null 非許容値で呼び出していることを確認してください。

MSDNによれば、 GetType()常に基礎となる型を提供する編集スクラッチ。null 以外のオブジェクトを渡していますか?

于 2012-06-05T18:32:05.980 に答える