c# - 是否可以覆盖复杂类型的 GetValue() 方法?
问题描述
我有一Job
堂课如下:
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; }
}
现在我想计算 job 的校验和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
正确获取复杂类型(即)的值,它返回类的命名空间,即值为stringifiedValues
:
"Civil EngineerMySolutionName.ProjectName.FolderName"
是否可以覆盖或更改GetValue()
返回嵌套属性的字符串化值的行为?
解决方案
它可以很好地获取价值;问题是value是一个SalaryRange
实例,默认object.ToString()
实现是写类型名。你可以覆盖它:
public class SalaryRange
{
public decimal MinSalary { get; set; }
public decimal MaxSalary { get; set; }
public override string ToString() => $"{MinSalary}-{MaxSalary}"; // for example
}
推荐阅读
- python - 我没有从 sqlalchemy 查询中获得任何数据?
- indexing - N1QL 查询即使在使用 couchbase 二级索引创建的缺少谓词的情况下也能正常工作
- r - 将csv文件读入R的问题
- single-sign-on - 如何使用 SAML2 SSO 在 .net MVC 中创建自己的 idp
- python - 使用 OpenCV 关闭全屏窗口
- java - 仅打印Java数组中另一个数字的两倍的数字
- django - 指定嵌套字段 Django
- ios - 为什么 SwiftUI 以相反的顺序加载项目?
- json - ASP.net Core 3.1 无法解析 JSON 文件
- python - 仅从公钥破解长 RSA 密钥