C# 检查类是否包含double类型的属性并将其转换为整数

C# 检查类是否包含double类型的属性并将其转换为整数,c#,reflection,C#,Reflection,我有一个相当复杂的模型类,需要与同类型的另一个类进行比较。我已经使用反射实现了一个比较函数,但是其中一个类的值将舍入为整数,而另一个类的值将是双倍的。我需要将所有这些双精度值四舍五入到最接近的整数,以便我的比较函数工作 有关的比较功能: public static List<Variance> DetailedCompare<Type>(this Type saveModel, Type loadModel) { List<Variance> var

我有一个相当复杂的模型类,需要与同类型的另一个类进行比较。我已经使用反射实现了一个比较函数,但是其中一个类的值将舍入为整数,而另一个类的值将是双倍的。我需要将所有这些双精度值四舍五入到最接近的整数,以便我的比较函数工作

有关的比较功能:

public static List<Variance> DetailedCompare<Type>(this Type saveModel, Type loadModel)
{

    List<Variance> variancesList = new List<Variance>();
    PropertyInfo[] fieldList = saveModel.GetType().GetProperties();
    foreach (PropertyInfo field in fieldList)
    {
        if (!ignoreList.Contains(field.Name))
        {
            Variance variance = new Variance();
            variance.property = field.Name;
            variance.saveValue = field.GetValue(saveModel, null);
            variance.loadValue = field.GetValue(loadModel, null);

            if (!Equals(variance.saveValue, variance.loadValue))
                variancesList.Add(variance);
        }
    }
    return variancesList;
}
是否有方法遍历对象属性并检查它们是否为double类型,或者是否需要手动更改每个属性


编辑:更具体地说,我在嵌套复杂类型方面遇到了很多问题。检查诸如intercept之类的变量并不太糟糕,但我不确定处理topLeft和bottomRight之类的问题的最佳方法是什么。还有像Point这样的复杂类型,但具有不同的属性名称,因此理想情况下,我不希望直接检查Point对象

您可以使用PropertyType:

if (field.PropertyType == typeof(double))

更新:示例

class Test1{
    public int t1 {get; set;}
    public string t2  {get;  set;}
    public Type t3  {get;  set;}
    public bool t4  {get;  set;}
    public double t5  {get;  set;}
    public float t6 {get;  set;}
    public double field;
}

void Main()
{
    PrintProps(new Test1());
    PrintProps(new System.Drawing.Point());

}

private static void PrintProps(object o){
    Console.WriteLine("Begin: " + o.GetType().FullName);
    var t = o.GetType();
    var props = t.GetProperties(BindingFlags.Public | 
                                    BindingFlags.Instance); // you can do same with GetFields();
    foreach(var p in props){
        Console.WriteLine(string.Format("{0} = {1}", p.Name,p.PropertyType == typeof(double)));
    }   
    Console.WriteLine("End");
}
样本输出:

Begin: UserQuery+Test1
t1 = False
t2 = False
t3 = False
t4 = False
t5 = True
t6 = False
End
Begin: System.Drawing.Point
IsEmpty = False
X = False
Y = False
End

您可以通过反射获取属性列表,然后可以使用
GetType()
方法检查它是否为double。您也希望获取嵌套复杂类型的属性,对吗?很抱歉响应延迟,但我正在查找嵌套类型的属性。这可能是一个有点愚蠢的问题,但是你会如何处理Point类,还是double类?类型。我假设为double?,您也必须检查该类型,但我一直在研究如何检查Point是否具有任何double属性,而无需手动检查。添加了示例,希望对您有所帮助
Begin: UserQuery+Test1
t1 = False
t2 = False
t3 = False
t4 = False
t5 = True
t6 = False
End
Begin: System.Drawing.Point
IsEmpty = False
X = False
Y = False
End