有没有一种方法(在C#.NET 4.0),提供对象属性名强类型的方式? 举例来说,如果我们有一个对象者
Public class Person{
public string Name { get; set; }
public int Age { get; set; }
}
我想发送给其他一些方法的参数名称,年龄属性名称,但不是作为字符串,但强类型:
SomeMethodThatWantToKnowKeys(Person.Name,Person.Age);
我想实现的是,如果有人更改属性的名称,他将不得不改变他们的属性名称,他被发送到“SomeMethodThatWantToKnowKeys”。 也许反射? 一个更好的办法将是不更新对象itsef或创建它的一个实例。
如果我知道你想什么,你可以使用表达式 :
void SomeMethod<T>(Expression<Func<T>> expr)
{
var memberExpr = expr.Body as MemberExpression;
Console.WriteLine("{0}: {1}", memberExpr.Member.Name, expr.Compile()());
}
var person = new { Name = "John Doe", Age = 10 };
SomeMethod(() => person.Name); // prints "Name: John Doe"
SomeMethod(() => person.Age); // prints "Age: 10"
好了,同时也有一些丑陋的黑客有一个更好的和推行清洁解决方案。 这个问题是因为抽象不到位。
什么是叫什么名字? 一个字符串? 这可能是一个int,双,焦炭,浮....什么...你真的不关心底层的类型。 你关心的名称的概念或观念。 我知道这是更加深了一点,但是这方面的经验将帮助您提供良好的设计。
以下是我建议现在,但我个人会去做得更多。
public class PersonName
{
public String Name { get; set; }
}
public class PersonAge
{
public int Age {get;set;}
}
public class Person
{
public PersonName PersonName {get;set;}
public PersonAge PersonAge {get;set;}
}
所以,现在你的方法签名是:
SomeMethodThatWantToKnowKeys(PersonName,PersonAge);
类型安全是一个了不起的事情!