繁体   English   中英

如何设置列表的属性 <Class> 在C#中

[英]How to set properties of a List<Class> in C#

我有一个这样定义的类:

[DataContract]
public class Response2
{
    [DataMember(Name = "done")]
    public bool done;
    [DataMember(Name = "records")]
    public List<Response3> r3entry;
}

[DataContract]
public class Response3
{
    [DataMember(Name = "Id")]
    public string strId { get; set; }
    [DataMember(Name = "Name")]
    public string strName { get; set; }
}

现在,我想发生的是从ANOTHER类中获取值并填充...类似这样:

string propertyRequest2 = CreatePropertyRequest2();
Response2 propResponse2 = MakeRequest2(propertyRequest2, sfToken);

List<Response> listAllData = new List<Response>();

foreach (var responseEntry in propResponse2.r3entry)
{
    listAllData.Add(new Response() { strId = responseEntry.strId, strName = responseEntry.strName } );

    // NOTE .strId IS ALWAYS UNIQUE IN BOTH CLASSES
    // - I know this is NOT the right syntax... will fix later.
    Where listAllData.strId = responseEntry.strId
    {
        listAllData.property = propertyResponse2(.strId=responseEntry.strId).property
    }
}

我确信(至少)代码的最后部分对大多数阅读此书的人来说很痛苦,但我会修复,所以它并不那么糟糕。 我只是不知道解释是否清楚。 以防万一我错了,这里的意思更像是这样:

// WE HAVE A LIST OF CLASSES WITH PROPERTIES
// ASSUME PROPERTIES ARE ID, ITEM, NAME
LIST1 = { ("1", "A", "APPLE"), ("2", "B", "BANANA"), ("3", "C", "COCONUT")}

// NOW WE HAVE ANOTHER LIST THAT HAS THE SAME ID BUT DIFF DATA
// ASSUME PROPERTIES ARE ID, COLOR
LIST2 = { ("1", "RED"), ("2", "YELLOW"), ("3", "BROWN) }

// AND THEN I WANT TO CREATE A NEW LIST WITH BOTH SETS OF DATA COMBINED
// ASSUME PROPERTIES ARE ID, ITEM, NAME, COLOR
LIST3 = { ("1", "A", "APPLE", "RED"), ("2", "B", "BANANA"), ("3", "C", "COCONUT", "BROWN") }

有关如何执行此操作的任何想法?

内连投影:

var list = from l1 in LIST1
    join l2 in LIST2 on l1.ID equals l2.ID
    select new {
        l1.ID,
        l1.Item,
        l1.Name,
        l2.Color
    }
    .ToList()

不清楚确切的目标是什么,Zip函数作用于两个列表并返回这两个列表的乘积。 您可以在这里了解更多信息:

在MSDN上压缩

但是实际上,如果您有两个清单,可以说:

int[] numbers = { 1, 2, 3, 4 };
string[] words = { "one", "two", "three" };
// The following example concatenates corresponding elements of the
// two input sequences.
var numbersAndWords = numbers.Zip(words, (first, second) => first + " " + second);

因此,在您的情况下,可能是这样的:

Response2[] response2 = //some list
Response3[] response3= // some other list
var response2Andresponse3 = response2.Zip(response3, (res2,res3) => //something you want to do with them

这会将response2的第一个元素与response3的第一个元素配对,依此类推。 我们在这里还假设它们具有相同的长度,以便您没有未配对的属性。

您将必须找出一种将其发送到您可能会发现有用的东西的方法,但是您将获得一个列表,其中它们逐个元素地对应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM