需要处理从 C# 匿名类型传递的对象

Need to process objects passed from C# anonymous type

提问人:HABosch 提问时间:5/18/2023 最后编辑:DavidHABosch 更新时间:5/18/2023 访问量:48

问:

我有一个匿名类型,其结构如下:

{Contact = {BO.AgtContact}, Agency = {BO.Agent}}  

AgtContact 和 Agent 是类

我目前正在我的主代码块中循环访问匿名类型以处理其内容。

我想将其提取为类似

public someReturnType MyMethod(IEnumerable<dynamic> list)
{
   Loop over list
      var contact = list.AgtContact
      contact.field = set field value
   End loop

   return someReturnType (same as IEnumerable<dynamic> that was passed in)
}

我希望这是有道理的。 任何帮助,非常感谢

C# 匿名类型

评论

1赞 Dmitry Bychenko 5/18/2023
是否可以从匿名类型切换到命名元组?{Contact, Agency}(Contact, Agency)
0赞 kanisimoff 5/18/2023
尝试从以下链接查看答案:IEnumerable<T 的 foreach 的 LINQ 等效项>

答:

1赞 Guru Stron 5/18/2023 #1

我强烈建议只创建一个类型(在带有 s 的最新语言版本中非常方便)并使用它而不是匿名类型。record

或者,您可以尝试使用泛型。类似这些内容:

public ICollection<T> MyMethod<T>(IEnumerable<T> list, Func<T, AgtContact> getter)
{
    var enumerated = list as ICollection<T> ?? list.ToArray();
    foreach (var t in enumerated)
    {
        var agtContact = getter(t); //since AgtContact is a class
        agtContact.PropOfField = ...;
    }

    return enumerated;
}

和用法:

var colletionOfAnonTypes = ...
MyMethod(colletionOfAnonTypes, arg => arg.Contact);