能否在C#中动态地向对象添加属性?

能否在C#中动态地向对象添加属性?,c#,C#,我有一节课。我在我的代码库中使用这个类,并希望保持它的干净。我目前正在使用FooBar,我有一个FooBar列表和一个值列表。我需要遍历列表并将值与FooBar元素匹配。将有多个值与单个FooBar关联。是否有某种方法可以临时将列表添加到FooBar对象中,以便将值附加到此列表中?大概是这样的: List <FooBar> myFoos = GetFoos(); List <int> values = GetValues(); foreach (var value in

我有一节课。我在我的代码库中使用这个类,并希望保持它的干净。我目前正在使用FooBar,我有一个FooBar列表和一个值列表。我需要遍历列表并将值与FooBar元素匹配。将有多个值与单个FooBar关联。是否有某种方法可以临时将列表添加到FooBar对象中,以便将值附加到此列表中?大概是这样的:

List <FooBar> myFoos = GetFoos();
List <int> values = GetValues();
foreach (var value in values)
{
    foreach (var foo in myFoos)
    {
        if (CheckMatch(foo, value))
        {
            if (foo.tempList == null)
            {
                foo.tempList = new List<int>();
            }
            foo.tempList.Add(value);
        }
    }
}
//...
//do things with the list of values on each FooBar
List myFoos=GetFoos();
列表值=GetValues();
foreach(值中的var值)
{
foreach(myFoos中的var foo)
{
如果(检查匹配(foo,值))
{
if(foo.templast==null)
{
foo.templast=新列表();
}
foo.templast.Add(值);
}
}
}
//...
//使用每个FooBar上的值列表执行操作
现在我正在创建一个新的>字典。创建字典是正确的方法吗,还是我可以做一些类似于我在上面发布的内容的事情?

您可以使用,它实际上只是一个
字典

dynamic instance=newexpandoobject();
instance.templast=新列表();
实例.templast.Add(1);

当然,使用一个临时的
字典就这么简单。

根据您的需要,有几种选择。可以使用
字典
字典

或者您可以使用
哈希集

这完全取决于您需要的约束类型


也许您应该创建您自己的类,该类派生自建议的类型之一,以便使您的总体代码更精简。

不,您不能动态地向对象添加属性。我不能告诉你你现在拥有的是不是最好的方法,因为我不知道你想做什么。如果你能解释一下这段代码在哪里以及如何使用,我可以给出一个更好的答案。

如果你愿意,你可以创建一个动态属性,但这不一定是解决问题的最佳方法


如果您的代码库中使用了一个类,并且需要将它与一个值列表相匹配,但是它没有保存这些值的能力,那么您应该重新考虑您的设计。根据您从何处获取这些值,您可能希望获得对<代码> FoBar 的特定实例的引用,或者考虑从FooBar继承或保存这些值的类,然后从FooBar实例获得<代码> ID <代码>属性。< / P>您可以为此使用Tuple。为什么不在FooBar上列出列表的内部或私有属性?我想说。这本字典是最好的选择。这是你描述的关系建模的清晰方式。
dynamic instance = new ExpandoObject();
instance.tempList = new List<int>();

instance.tempList.Add(1);