我有一本字典:
Dictionary<string, object> person = new Dictionary<string, object>();
字典中的值是这样的:
person.Add("State", "Florida");
person.Add("Gender", "Male");
person.Add("Married", 1);
person.Add("SalaryUnderHundredDollar", 1)
我必须检查Person的上述属性,然后我必须给那个人一些方案。
我正在做以下事情:
List<int> listOfSchemesEligble = new List<int>();
if(person["State"].ToString() == "Florida" || person["State"].ToString() == "NewYork")
{
listOfSchemesEligble.Add(100);
}
if(person["Gender"].ToString() == "Male")
{
listOfSchemesEligble.Add(110);
}
if(Convert.ToBoolean(person["Married"]))
{
listOfSchemesEligble.Add(200);
}
if(Convert.ToBoolean(person["SalaryUnderHundredDollar"]))
{
listOfSchemesEligble.Add(500);
}
有没有更好的方法来做到这一点,因为除了这些之外我还有很多条件?
答案 0 :(得分:2)
看来你应该创建一个Person
类,它将保存一个人的属性:
public enum GenderType
{
Male, Female, Unknown
}
public class Person
{
public int PersonId {get;set;}
public string State {get;set;}
public GenderType Gender {get;set;}
public bool Married {get; set}
public bool SalaryUnderHundredDollar {get;set}
}
现在您可以创建Person
类的实例并以强类型方式直接使用它们:
var person = new Person()
{
State = "Florida",
Gender = GenderType.Male,
Married = true,
SalaryUnderHundredDollar = true
};
if ( person.Married ) ...
有关详细信息,请参阅the documentation intro to classes。类是面向对象语言的基本构建块,因此将现实世界中的对象表示为具有适当属性的类是很自然的。
正如您在评论中提到的,您的数据来自JSON。看起来它是用双花括号包裹的,但是内部的&#34;对象&#34;是JToken
。您也可以将JToken
反序列化为类:
var person = personFile.First.ToObject<Person>();
唯一的问题似乎是Married
和SalaryUnderHundredDollar
是整数而不是布尔值,因此您必须将上面类中的属性类型更改为int
。
答案 1 :(得分:1)
您的实施需要更改。我可以想象下面的实现在可维护性+ OOP指南方面更好:
public class Person
{
public string State { get; set; }
public string Gender { get; set; }
public bool Married { get; set; }
public bool SalaryUnderHundredDollar { get; set; }
}
public class SchemeBuilder
{
public List<Func<int>> BuildScheme(Person person)
{
return new List<Func<int>>
{
()=> person.State=="Florida" || person.State=="NewYork" ? 100 : 0,
()=> person.Gender=="Male" ? 110 : 0,
()=>person.Married ? 200 : 0,
()=>person.SalaryUnderHundredDollar ? 500 :0
};
}
}
public class TestClass
{
public void Main()
{
Person person = new Person();
person.State = "NewYork";
person.Gender = "Female";
person.Married = true;
person.SalaryUnderHundredDollar = true;
List<int> listOfSchemesEligble = new List<int>();
var builder = new SchemeBuilder();
var schemes = builder.BuildScheme(person);
foreach(var scheme in schemes)
{
var eleigiblePoints = scheme();
if (eleigiblePoints != 0)
listOfSchemesEligble.Add(eleigiblePoints);
}
}
}
当然可以进一步重构。