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 为空。我如何让它读取日期时间?

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

为避免空值异常,请将最后一行更改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

可空类型属于 类型Nullable<T>,并具有两个属性:HasValueValue。您首先需要HasValue检查是否Value已设置,然后您可以从Value.

您可以检查给定对象是否为 aNullable<T>并在您的 中进行这些检查GetPropValue,或者您在此方法之外执行此逻辑并确保使用不可为空的值调用它。

编辑从头开始,根据 MSDN GetType() ,它总是为您提供底层类型。您确定要传递一个非空对象吗?

于 2012-06-05T18:32:05.980 回答