【问题标题】:Alternate way to initialize class property which is of type class?初始化类类型的类属性的替代方法?
【发布时间】:2016-02-18 10:21:47
【问题描述】:

我有一个 CibilResponse 类,它具有类类型(TUEF 类)的属性。

ICIBIL.cs

[ServiceContract]
public interface ICIBIL
{    
    [OperationContract]
    string InsertCibil(CibilResponse cibilResponse);    
    [OperationContract]
    string GenerateEnquiry(CibilEnquiry testObj);   
}

[DataContract]
public class CibilResponse
{
    [DataMember]
    public string ResponseString { get; set; }
    [DataMember]
    public string Business { get; set; }
    [DataMember]
    public string MkrId { get; set; }
}    

[DataContract]
public class CibilEnquiry
{
    [DataMember]
    public TUEF Tuef { get; set; }              
}    

[DataContract]
public class TUEF
{
    [DataMember]
    public string SegmentTag { get; set; }
    [DataMember]
    public string Version { get; set; }
    [DataMember]
    public string MemberReferenceNumber { get; set; }        
}

应用:

CibilWcfService.CIBIL obj = new CibilWcfService.CIBIL();
CibilWcfService.CibilEnquiry CibilEnquiryEnq = new CibilWcfService.CibilEnquiry();
CibilWcfService.TUEF objtuef = new CibilWcfService.TUEF();
objtuef.Version = "123";
CibilEnquiryEnq.Tuef = objtuef;
string res = obj.GenerateEnquiry(CibilEnquiryEnq);

如您所见,我必须创建各种类的单个对象(在本例中为类 TUEF 的对象 objtuef),然后将其分配给 CibilEnquiry 类的对象 CibilEnquiryEnq

如果 CibilResponse 中有很多类型类的成员,这可能会非常乏味。初始化类成员的更好方法是什么?

我正在考虑在 CibilResponse 类中使用构造函数并将值分配为CibilEnquiryEnq.Tuef.Version = "123";,但它似乎不起作用,它给了我空引用错误。我仍然必须在我的应用程序中创建一个 TUEF 对象。

public CibilEnquiry()
{
    this.Tuef = new TUEF();
}
  • 更新:

应用:

CibilWcfService.CIBIL obj = new CibilWcfService.CIBIL();
                CibilWcfService.CibilEnquiry CibilEnquiryEnq = new CibilWcfService.CibilEnquiry();
            CibilEnquiryEnq.Tuef.Version = "1111";//null reference error

            string res = obj.GenerateEnquiry(CibilEnquiryEnq);

WCF ICIBIL.cs

[ServiceContract]
public interface ICIBIL
{

    [OperationContract]
    string InsertCibil(CibilResponse cibilResponse);

    [OperationContract]
    string TestInsert(string testObj);

    [OperationContract]
    string GenerateEnquiry(CibilEnquiry testObj);

}

[DataContract]
public class CibilEnquiry
{
    [DataMember]
    public TUEF Tuef { get; set; }
    public CibilEnquiry()
    {
        this.Tuef = new TUEF();
        //this.Tuef = new TUEF() { SegmentTag = "", Version = ""};
    }

}


 [DataContract]
    public class TUEF
    {
        [DataMember]
        public string SegmentTag { get; set; }
        [DataMember]
        public string Version { get; set; }
        [DataMember]
        public string MemberReferenceNumber { get; set; }
   }

【问题讨论】:

标签: c# asp.net .net class oop


【解决方案1】:

在构造函数中初始化它们的最佳方法,您已经在此处提出了建议。

创建一个参数构造函数,并将这些参数传递给您的实例:

public CibilEnquiry(string segmentTag, string version, string memberReferenceNumber)
{
    this.Tuef = new TUEF()
    {
        SegmentTag = segmentTag, 
        Version = version, 
        MemberReferenceNumber = memberReferenceNumber
    };
    //initialize all of your class properties here
    //simply it is the purpose of constructor to properly initialize the instance
}

如果您不想通过构造函数传递值,只需在其中初始化实例并稍后分配值:

public class CibilEnquiry
{
    public CibilEnquiry()
    {
        this.Tuef = new TUEF();
    }

    public TUEF Tuef { get; set; }
}

实例化类:

CibilEnquiry enquiry = new CibilEnquiry();
enquiry.Tuef.Version = "123";

【讨论】:

  • 是否可以在不传递任何值的情况下创建 CibilEnquiry 的实例:CibilWcfService.CibilEnquiry CibilEnquiryEnq = new CibilWcfService.CibilEnquiry();(可以将成员设置为默认值为 null),然后将值设置为:CibilEnquiryEnq.Tuef.Version = "123";
  • 是的,有可能,您甚至不需要设置 null 值。如果您不为它们分配任何东西,它们将已经为空。
  • 怎么样?我添加了这个构造函数:public CibilEnquiry() { this.Tuef = new TUEF() { SegmentTag = "", Version = ""}; } 但我仍然在CibilEnquiryEnq.Tuef.Version = "123";得到空引用错误@
  • 我看到了你更新的答案,我刚刚尝试过完全相同的事情`this.Tuef = new TUEF();`。但它仍然没有解决空引用错误。
  • 它应该可以工作,我也测试过它一切正常。可能是你错过了一些东西。您能否添加更新后的类代码以及如何实例化它?
猜你喜欢
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 2015-12-20
  • 1970-01-01
  • 2017-09-29
  • 2021-11-21
相关资源
最近更新 更多