如何让C#类在其构造函数中实例化另一个类?

时间:2013-08-15 10:22:10

标签: c#

我创建了以下内容:

public class HttpStatusErrors
{
    public HttpStatusErrors()
    {
        this.Details = new List<HttpStatusErrorDetails>();
    }
    public string Header { set; get; }
    public IList<HttpStatusErrorDetails> Details { set; get; }
}

public class HttpStatusErrorDetails
{
    public HttpStatusErrorDetails()
    {
        this.Errors = new List<string>();
    }
    public string Error { set; get; }
    public IList<string> Errors { set; get; }
}

在我的代码中我使用它是这样的:

var msg = new HttpStatusErrors();
   msg.Header  = "Validation Error";           
   foreach (var eve in ex.EntityValidationErrors) {

      msg.Details. // Valid so far 
      msg.Details.Error // Gives the error below:

Ide将msg.Details视为有效,但当我尝试编写第二行时,我得到:

Error   3   'System.Collections.Generic.IList<TestDb.Models.Http.HttpStatusErrorDetails>' 
does not contain a definition for 'Error' and no extension method 'Error' accepting a first 
argument of type 'System.Collections.Generic.IList<TestDb.Models.Http.HttpStatusErrorDetails>' 
could be found (are you missing a using directive or an assembly reference?)    
C:\K\ST136 Aug 16\WebUx\Controllers\ProblemController.cs    121 33  WebUx

我做错了吗?我认为我设置的方式是在创建第一个类时创建新的列表。

3 个答案:

答案 0 :(得分:10)

msg.Details会返回List个对象。 List<T>没有Errors属性。您需要访问列表中的特定元素,然后才能拥有Errors属性。

例如:

msg.Details[0].Error

在您的代码中,您可能希望在尝试访问它们之前确保msg.Details包含元素,或者更好地在foreach循环中迭代它们。

答案 1 :(得分:0)

详细信息是一个集合。属性Error属于集合Details中的项目。该集合详细信息

上没有属性Error

答案 2 :(得分:0)

您正试图转到Details IList<HttpStatusErrorDetails>。{/ p>

如果你想浏览该列表中的项目,你需要仔细检查它们 例如

msg.Details[number].Errors

foreach(HttpStatusErrorDetails err in msg.Details)
{
    err.Errors
}