C# 有没有更好的方法做到这一点而不反思?

C# 有没有更好的方法做到这一点而不反思?,c#,asp.net,C#,Asp.net,我需要使用相同的函数设置类的所有属性。目前,我正在使用反射获取所有属性,并循环设置它们的值。我知道所有的属性,没有动态发生 以下是我当前在构造函数中运行的代码: foreach (PropertyInfo property in this.GetType().GetProperties()) { // retreive the value and set it property.SetValue(this, GetValue(field), null); } 有没有办法不使用反射

我需要使用相同的函数设置类的所有属性。目前,我正在使用反射获取所有属性,并循环设置它们的值。我知道所有的属性,没有动态发生

以下是我当前在构造函数中运行的代码:

foreach (PropertyInfo property in this.GetType().GetProperties())
{
    // retreive the value and set it
    property.SetValue(this, GetValue(field), null);
}

有没有办法不使用反射来做类似的事情?

根据这里给出的信息,我不知道

也就是说,它确实提出了一个问题:你在做什么,需要你这么做?为什么你需要在一个循环中迭代你的所有属性,你有多少


更多的细节可能会促使别人给你一个更好的解决方案。例如,属性在做什么?它们是否连接到一些可以在不使用反射的情况下更改的底层数据?如果你有很多离散属性,那么拥有一堆离散属性是不是一种选择?

根据这里给出的信息,我不知道这一点

也就是说,它确实提出了一个问题:你在做什么,需要你这么做?为什么你需要在一个循环中迭代你的所有属性,你有多少


更多的细节可能会促使别人给你一个更好的解决方案。例如,属性在做什么?它们是否连接到一些可以在不使用反射的情况下更改的底层数据?如果你有很多离散属性,那么拥有一堆离散属性是不是一种方法?

嗯,也许我误解了你的意思,但是你说你知道所有的属性,为什么不写一个方法来设置它们呢

void SetValues() {
    this.Property1 = field1;
    this.Property2 = field2;
    this.Property3 = field3;
    this.Property4 = field4;
}

我怀疑你的问题中缺少了什么。

嗯,也许我误解了你的意思,但是你说你知道所有的属性,为什么不写一个方法来设置它们呢

void SetValues() {
    this.Property1 = field1;
    this.Property2 = field2;
    this.Property3 = field3;
    this.Property4 = field4;
}


我怀疑您的问题中缺少了什么。

源代码忽略了重要方面。。。菲尔德来自哪里?你知道这个类吗?或者这是一个应该与不同类一起工作的函数吗?你使用的是哪个版本的.NET?你为什么在构造函数中这样做?在构造函数中,您肯定知道您的类具有哪些属性?!?1 GetValuefield实际上是对property.GetValuefield的调用,还是有字段名的内部集合?2除此之外,如果没有其他上下文,则无法回答此问题。GetValue正在将字段名映射到数据库项列表。我创建了一个处理这个问题的方法,效果非常好。我想说的是,尽管我知道每个属性是什么,但我必须对每个属性单独调用它,这很乏味,而且属性经常变化。我希望有一个方法可以像这样循环遍历每个属性。。。菲尔德来自哪里?你知道这个类吗?或者这是一个应该与不同类一起工作的函数吗?你使用的是哪个版本的.NET?你为什么在构造函数中这样做?在构造函数中,您肯定知道您的类具有哪些属性?!?1 GetValuefield实际上是对property.GetValuefield的调用,还是有字段名的内部集合?2除此之外,如果没有其他上下文,则无法回答此问题。GetValue正在将字段名映射到数据库项列表。我创建了一个处理这个问题的方法,效果非常好。我想说的是,尽管我知道每个属性是什么,但我必须对每个属性单独调用它,这很乏味,而且属性经常变化。我希望能够有一个方法像这样循环遍历每个属性。这正是我想要做的,只是抽象,因为我的属性会经常更改,我需要运行相同的函数来获取每个字段的值。@Victor-您如何声明属性-它们是“自动”属性,还是那些有明确基础数据的?@iandotkelly我不知道你所说的“自动”属性是什么意思。它们都有底层数据。自动属性是在没有底层变量或其他数据存储的情况下声明的属性,因此您可以声明一个int属性,编译器会自动为您的类创建一个私有成员int。好的,谢谢你的解释。它们都是自动属性。这正是我想要做的,只是抽象了一下,因为我的属性会经常更改,我需要运行相同的函数来获取每个字段的值。@Victor-您如何声明属性-它们是“自动”属性吗,还是那些有明确基础数据的?@iandotkelly我不知道你所说的“自动”属性是什么意思。它们都有底层数据。自动属性是在没有底层变量或其他数据存储的情况下声明的属性,因此您可以声明一个int属性,编译器会自动为您的类创建一个私有成员int。好的,谢谢你的解释。它们都是自动属性
其中的字段映射到基础数据并在视图中使用。我试图避免的问题是允许轻松更改属性编辑、删除和添加,因为它们都具有相同的值方法构造函数,所以我试图避免在许多地方为任何属性更改更新代码。因此,如果我理解正确,您有一个名为例如Username的属性,并且希望将其映射到具有相同名称的字段,并且希望避免在更改属性/字段名称时必须更新构造函数。你的问题的答案是否定的,我相信,你必须用反思来做到这一点。也就是说,我不完全确定这是一个明智的方法来节省一些代码更新。您多久更改一次字段名?我想我可能必须像您所说的那样单独设置每个属性。我认为更新代码的成本将低于反射的成本。表现很重要。我将有很多这样的类,所以我正在尝试确定要使用的最佳模式。所有字段都映射到基础数据并在视图中使用。我试图避免的问题是允许轻松更改属性编辑、删除和添加,因为它们都具有相同的值方法构造函数,所以我试图避免在许多地方为任何属性更改更新代码。因此,如果我理解正确,您有一个名为例如Username的属性,并且希望将其映射到具有相同名称的字段,并且希望避免在更改属性/字段名称时必须更新构造函数。你的问题的答案是否定的,我相信,你必须用反思来做到这一点。也就是说,我不完全确定这是一个明智的方法来节省一些代码更新。您多久更改一次字段名?我想我可能必须像您所说的那样单独设置每个属性。我认为更新代码的成本将低于反射的成本。表现很重要。我将有很多这样的类,所以我正在尝试确定使用的最佳模式。