用字符串直接填充对象属性

时间:2019-01-21 11:05:48

标签: c#

我知道如何将隐式对象转换为字符串,但是可以将字符串转换为对象属性吗?

我想直接填充对象属性,而不使用代码: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"吗?

我知道如何将隐式对象转换为字符串,但是可以将字符串转换为对象属性吗?

2 个答案:

答案 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循环将其自动化。然后,您可以再次修改此代码以进行各种检查。

仍然没有理由为什么需要它-如果您更好地解释用例,则可能会有更好的方法来解决您的问题。