我正在尝试将信息存储在匿名值块中
//holds all info
var jobs = new { newJob, numBytes, requiredTime };
然后获取该信息并将其作为单个元素放入列表中
//puts above info into a list
joblist.Add(Convert.ToString(jobs));
Console.WriteLine(joblist[0]); //testing purposes
现在我想做的是能够调用joblist并在第4位获取示例numBytes的值。
这可能吗?或者有人可以帮助另外一种方法吗?非常感谢!
答案 0 :(得分:1)
创建一个命名类。然后,您可以获得该类型的对象列表,并以您想要的任何方式操作该列表。
使用课程是您尝试做的最佳实践。默认情况下,您应该考虑将结构化数据存储在由自定义类组成的对象模型中。这里有另一个答案,建议使用动态 - 这是有效的,有它的位置,但它更多的是最后的解决方案。你想要的是发挥C#的优势,它们是丰富的类和静态类型。匿名类型也是静态类型的,但由于您无法命名类型,因此您无法声明静态类型列表来保存它们。您也不能将它们用作返回类型的方法。
答案 1 :(得分:0)
实际上我并不确切地知道你对的意思“现在我想做的是能够调用joblist并删除例如位置4的numBytes。”
但我想你只是想把对象放在一个列表中并查询numBytes并删除一些元素。
通过动态,您可以处理动态对象......
var jobs = new List<dynamic>();
for (int i = 0; i < 100; i++)
{
string newJob = "Job" + i;
int numBytes = i;
TimeSpan requiredTime = new TimeSpan(0,0,i);
//holds all info
var job = new { newJob, numBytes, requiredTime };
jobs.Add(job);
}
jobs.RemoveAll(p => p.numBytes > 50);
而不是这个,我同意你的问题下面的评论,并会创建一个普通的类,它包含你需要的属性,并简单地将其实例放入列表中。动态应该只在非常罕见的情况下使用,而你的声音听起来并不是特别的。
答案 2 :(得分:0)
在C#中要做的“正常”事情是创建一个类来保存要存储的信息。例如:
public class Job
{
public string Name { get; set; }
public int NumBytes { get; set; }
public DateTime RequiredTime { get; set; }
}
然后您可以将这些添加到列表中:
var jobs = new List<Job>();
var aJob = new Job();
aJob.Name = "Job 1";
aJob.NumBytes = 123;
jobs.add(aJob);
然后您可以通过列表中的索引访问作业:
var jobNumBytes = jobs[3].NumBytes;
有关C#的注意事项,当你这样做时:
new { newJob, numBytes, requiredTime };
编译器在构建时只创建一个强类型类(就像我上面创建的Job
类),并为它生成一个随机名称。它从您分配给它的变量中推断出属性名称和类型。创建的.exe或.dll实际上包含此类型的类定义,您无法轻松地从代码中的其他位置获取它。它不是真正的“动态”。因此,使用该语法通常只是一种懒惰的方式来声明您只需要片刻的类。通常只在1方法内,那么你不再需要它了。创建命名类通常是您想要做的。