2014-09-05 50 views
1

我从来没有使用过结构。我已经创建了一个简单的示例,说明了我在下面要做的事情。我选择struts的原因是因为对象永远不需要存在于类的上下文之外。谢谢。如何将结构实例赋值给包含该结构的类?

public class EmailAddress 
{ 
    public string Email { get; set; } 

    public string Name { get; set; } 
} 


public class EmailMessage 
{ 
    public EmailAddress To { get; set; } 

    public EmailAddress From { get; set; } 

    public string Subject { get; set; } 

    public string Body { get; set; } 

    public struct Attachment 
    { 
     public string Name { get; set; } 

     public string Bas64 { get; set; } 
    } 

尝试方法

protected void MyMethod() 
{ 
    var myEmailMessage = new EmailMessage 
    { 
     To = { Email = "ToEmailAddress" }, 
     From = { Email = "FromEmailAddress" } 
    }; 

    var myAttachment = new EmailMessage.Attachment 
    { 
     Name = "AttachmentName", 
     Bas64 = "Base64String" 
    }; 

    myEmailMessage.Attachment = myAttachment; 
} 
+2

你得到什么错误? – 2014-09-05 09:22:26

+0

您的电子邮件没有“附件” – Sayse 2014-09-05 09:24:05

+0

考虑阅读[在类和结构之间选择](http://msdn.microsoft.com/en-us/library/ms229017(v = vs.110).aspx )。我没有理由在这里使用'struct'。 – 2014-09-05 09:53:13

回答

4

您不能使用struct声明为类的属性。您应该分割该属性和实际的struct定义。

试试这个:

public _Attachment Attachment {get;set;} /* Attachment as property */ 

public struct _Attachment /* The definition of the struct */ 
{ 
    public string Name { get; set; } 

    public string Bas64 { get; set; } 
} 

而且使用这样的:

var myAttachment = new EmailMessage._Attachment 
{ 
    ... 
} 

顺便说一句:有一个struct没有真正的需要。使用class也可以。

1

你的问题是myEmailMessage.Attachment = my Attachment;正在尝试将某些东西分配给名为Attachment的成员。问题在于你的班级没有名为Attachment的房产。你已经声明了一个叫做struct的函数,但这只是一个声明,不会创建一个属性或其他类似的东西。

你需要的是在你的课堂上有一个实际的属性,然后你可以指定一个Attachment的实例。

1

您的EmailMessage类没有Attachment属性,只有Attachment嵌套类型。

您应该Attachment结构重命名为EmailAttachment为了避免名称冲突,并创建一个Attachment属性:

public class EmailMessage 
{ 
    public EmailAddress To { get; set; } 

    public EmailAddress From { get; set; } 

    public string Subject { get; set; } 

    public string Body { get; set; } 

    public EmailAttachment Attachment { get; set; } 

    public struct EmailAttachment 
    { 
     public string Name { get; set; } 

     public string Bas64 { get; set; } 
    } 
} 
相关问题