Reputation: 5539
I have a CibilResponse Class that has properties that are of class type (TUEF class).
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; }
}
Application:
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);
As you can see I have to create a individual objects of various classes (object objtuef
of class TUEF
in this case) and then assign it to object CibilEnquiryEnq
of CibilEnquiry
class.
It can be very tedious if there are numerous members of type class in CibilResponse. What is the better way to initialize class members?
I was thinking of using constructor in CibilResponse Class and assigning values as CibilEnquiryEnq.Tuef.Version = "123";
but it didnt seem to work it gave me null reference error. I still had to create an object of TUEF in my application.
public CibilEnquiry()
{
this.Tuef = new TUEF();
}
Application:
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; }
}
Upvotes: 0
Views: 65
Reputation: 12439
The best way to initialize them in constructor, which you already suggested here.
Create a parametric constructor, and pass those parameters to your instance:
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
}
If you don't want to pass values through constructor, just initialize the instance in there and assign the values later:
public class CibilEnquiry
{
public CibilEnquiry()
{
this.Tuef = new TUEF();
}
public TUEF Tuef { get; set; }
}
Instantiating the class:
CibilEnquiry enquiry = new CibilEnquiry();
enquiry.Tuef.Version = "123";
Upvotes: 2