我知道如何将隐式对象转换为字符串,但是可以将字符串转换为对象属性吗?
我想直接填充对象属性,而不使用代码:ob.property="text".
相反,我想使用:ob="text"
示例:
class Person
{
public string Name { get; set; }
public string Name2 { get; set; }
public string Name { get; set; }
.
.
.
}
var a=new Person();
我想用字符串"text1"
填充属性Name
有什么方法可以做到:a="text1"
而不是a.Name="text1"
吗?
我知道如何将隐式对象转换为字符串,但是可以将字符串转换为对象属性吗?
答案 0 :(得分:0)
您可以实现的最接近的方法是使用隐式运算符重载。
例如,
class Person
{
public string Name { get; set; }
public static implicit operator string(Person person)
{
return person.Name;
}
public static implicit operator Person(string name)
{
return new Person(){Name=name};
}
}
现在您可以指定为
var person = new Person();
person = "Test Name";
但是您需要评估这种努力是否值得。
答案 1 :(得分:0)
虽然这是一个愚蠢的主意,但是您可以使用一些反思,就像@Bizhan所说的使用索引器来实现类似的目的。
static void Main(string[] args)
{
MyClass mc = new MyClass();
mc[0] = "Test Name";
mc[1] = "Test Surname";
}
class MyClass
{
public string this[int i]
{
set
{
var props = this.GetType().GetProperties();
props[i + 1].SetValue(this, value);
}
}
public string Name { get; private set; }
public string Surname { get; private set; }
}
唯一的问题是它仅适用于String类型,索引器必须位于类的首位,当属性索引超出可用属性数时,将引发异常,它使用基于索引的属性访问,但是可以使用for循环将其自动化。然后,您可以再次修改此代码以进行各种检查。
仍然没有理由为什么需要它-如果您更好地解释用例,则可能会有更好的方法来解决您的问题。