是否可以覆盖复杂类型的 GetValue() 方法?
Is it possible to override GetValue() method for complex types?
我有一个 Job
class 如下:
public class Job
{
public string JobTitle { get; set; }
public SalaryRange SalaryRange { get; set; }
}
public class SalaryRange
{
public decimal MinSalary { get; set; }
public decimal MaxSalary { get; set; }
}
现在我想计算作业object
的校验和。此校验和的目的是指示是否有任何 属性 作业已被修改...所以我想构建一个包含其所有 属性 值的字符串并获取此字符串的校验和:
[TestMethod]
public void Calculate_job_checksum()
{
var salary = new SalaryRange()
{
MinSalary = 15,
MaxSalary = 20
};
vat job = new Job()
{
JobTitle= "Civil Engineer",
SalaryRange = salary
};
string stringifiedValues = "";
PropertyInfo[] properties = job.GetType().GetProperties();
foreach (PropertyInfo p in properties)
{
if (p.CanRead))
{
// combine all values
var val = p.GetValue(job);
stringifiedValues += val.ToString();
}
}
// get the checksum
jobChecksum = stringifiedValues.GetChecksum();
}
问题是 GetValue()
没有正确获取复杂类型(即 SalaryRange
)的值,它 return 是 class 的命名空间,即stringifiedValues
的值为:
"Civil EngineerMySolutionName.ProjectName.FolderName"
是否可以将 GetValue()
的行为覆盖或更改为 return 嵌套属性的字符串化值?
取值正常; 问题是值是一个SalaryRange
实例,默认object.ToString()
实现是写类型名。你可以覆盖它:
public class SalaryRange
{
public decimal MinSalary { get; set; }
public decimal MaxSalary { get; set; }
public override string ToString() => $"{MinSalary}-{MaxSalary}"; // for example
}
我有一个 Job
class 如下:
public class Job
{
public string JobTitle { get; set; }
public SalaryRange SalaryRange { get; set; }
}
public class SalaryRange
{
public decimal MinSalary { get; set; }
public decimal MaxSalary { get; set; }
}
现在我想计算作业object
的校验和。此校验和的目的是指示是否有任何 属性 作业已被修改...所以我想构建一个包含其所有 属性 值的字符串并获取此字符串的校验和:
[TestMethod]
public void Calculate_job_checksum()
{
var salary = new SalaryRange()
{
MinSalary = 15,
MaxSalary = 20
};
vat job = new Job()
{
JobTitle= "Civil Engineer",
SalaryRange = salary
};
string stringifiedValues = "";
PropertyInfo[] properties = job.GetType().GetProperties();
foreach (PropertyInfo p in properties)
{
if (p.CanRead))
{
// combine all values
var val = p.GetValue(job);
stringifiedValues += val.ToString();
}
}
// get the checksum
jobChecksum = stringifiedValues.GetChecksum();
}
问题是 GetValue()
没有正确获取复杂类型(即 SalaryRange
)的值,它 return 是 class 的命名空间,即stringifiedValues
的值为:
"Civil EngineerMySolutionName.ProjectName.FolderName"
是否可以将 GetValue()
的行为覆盖或更改为 return 嵌套属性的字符串化值?
取值正常; 问题是值是一个SalaryRange
实例,默认object.ToString()
实现是写类型名。你可以覆盖它:
public class SalaryRange
{
public decimal MinSalary { get; set; }
public decimal MaxSalary { get; set; }
public override string ToString() => $"{MinSalary}-{MaxSalary}"; // for example
}