将类中的字符串作为c#中的方法参数传递?

时间:2018-02-02 05:26:43

标签: c#

我对C#很陌生,并尝试制作一个如何更改listview地址簿中的名称,地址等的方法。

关于如何将“.Name”部分变成可以作为参数传递给方法的变量,我一直在摸不着头脑。

为了我的方法工作,我需要能够使用参数将“.Name”部分更改为:“。Address”,“。Phone”等。

Box1表示已禁用的文本框,仅显示列表视图中所选项目的相关信息。 Box2表示用户可以键入他想要进行的更改的框。

代码正在运行,这只是为了学习如何提高效率而不是重复。

private void CheckInput(string box1, string box2, string details)
    {
        if (box2 != box1 && box2 != "")                             
        {
            DialogResult dialogResult = MessageBox.Show(
                "Are you sure you want to change the " + details 
                + " from, " + box1 + ", to, " + box2 + "?", "Warning", 
                MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (dialogResult == DialogResult.Yes)
            {
                people[listView1.SelectedItems[0].Index].Name = box2;

                if (box2 == "")
                {
                    listView1.SelectedItems[0].Text = box1;
                }
                else
                {
                    listView1.SelectedItems[0].Text = box2;
                }
            }
            if (dialogResult == DialogResult.No)
            {

            }
        }
    }

    class Person
    {
        public string Name
        {
            get;
            set;
        }
        public string Email
        {
            get;
            set;
        }
        public string Address
        {
            get;
            set;
        }
        public string Phone
        {
            get;
            set;
        }

    }

1 个答案:

答案 0 :(得分:0)

我会选择单独的名字和制定者代表:

private void CheckInput(string oldValue, string newValue,
          string propertyName, Action<string> setterDelegate)
{
    ...
    setterDelegate(newValue);
}

CheckInput("old", "new", nameof(value.Name), newVal => value.Name = newVal);

如果你想坚持使用名称Set object property using reflection,你也可以使用反射,但你仍然需要传递“人”作为参数。另一个更好的选择是使用表达式树,类似于LINQ-to-SQL如何设置查询并获取属性的名称 - Retrieving Property name from lambda expression

注意:通常框架提供了自己的绑定值和验证机制。如果您需要练习重新发明轮子,请查看带有属性的注释属性 - Validation using attributes(小心,因为它包含完整的答案,因此您可能首先要阅读属性)。