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