C# 将以前的属性值指定给c中的下一个属性#
这是我的示例代码 我有一个名为C# 将以前的属性值指定给c中的下一个属性#,c#,C#,这是我的示例代码 我有一个名为Employee的类,它有一些属性 我想给我的类属性赋值,就像这样 Employee obj = new Employee() { userName="aaa@aa.com", email=userName } var str = "aaa@aa.com" Employee obj = new Employee() { userName=str, email=str } 它抛出了一个错误: 此上下文中不存在用户名 我知道这样做是可
Employee
的类,它有一些属性
我想给我的类属性赋值,就像这样
Employee obj = new Employee()
{
userName="aaa@aa.com",
email=userName
}
var str = "aaa@aa.com"
Employee obj = new Employee()
{
userName=str,
email=str
}
它抛出了一个错误:
此上下文中不存在用户名
我知道这样做是可能的:
Employee obj = new Employee()
obj.userName="aaa@aa.com",
obj.email=userName
但我不想要它。如何将上一个属性指定给下一个属性
编辑
实际上,我在LINQ查询选择函数中使用了这个类,所以我不能全局分配对象
这是我完整的原始代码
*PersonalRequestModel model = new PersonalRequestModel();
model = (from personal in this.travelContext.RecruitmentJobs
join jobdesc in this.travelContext.JobDescriptions on personal.id equals jobdesc.recruitmentJobId into job
from jobd in job.DefaultIfEmpty()
where personal.id == modelId
// where personal.id == modelId
select new
{
gjobdescription = jobd,
gpersonal = personal
}).GroupBy(x => x.gpersonal.id)
.Select(personalother => new PersonalRequestModel
{
jobdescrip = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gjobdescription,
recuritmentjob = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal,
//recuritmentjob = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal,
personalviewdetail = new PersonalRequestDisplayModel
{
Gender = personalother.FirstOrDefault(x => x.gjobdescription.recruitmentJobId == personalother.Key).gjobdescription.gender,
TypeOfVacancy = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.typeOfVacancy,
newOrReplacement = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.newOrReplacement,
Designation = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.designation,
DateOfRequest = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.dateOfRequest,
HeadCount = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.headcount,
division = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.division,
HiringDepartment = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.hiringDepartment,
budgetorNonbudget = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.budgetorNonbudget,
Qualificationdesc = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.educationalQualification,
expectedDateOfJoin = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.expectedDateOfJoin,
ReasonForRequest = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.reason,
noofcandiate = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.noofCandidate,
workexp = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.workExperience,
eduqual = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.educationalQualification,
//isReplacementEmpNo = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.isReplacementEmpNo,
// isReplacementName = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.isReplacementEmpNo,
isTemporaryPeriod = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.isTemporaryPeriod,
hrApprovalStatus = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.hrApprovalStatus,
hrApprovalDate = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.hrApprovalDate,
hrApprovalRemarks = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.hrApprovalRemarks,
level2ApprovalStatus = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.level2ApprovalStatus,
level2ApprovalDate = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.level2ApprovalDate,
level2ApprovalRemarks = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.level2ApprovalRemarks,
level3ApprovalStatus = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.level3ApprovalStatus,
level3ApprovalDate = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.level3ApprovalDate,
level3ApprovalRemarks = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.level3ApprovalRemarks,
h1ApprovalStatus = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.h1ApprovalStatus,
h1ApprovalDate = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.h1ApprovalDate,
h1ApprovalRemarks = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.h1ApprovalRemarks,
h2ApprovalStatus = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.h2ApprovalStatus,
h2ApprovalDate = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.h2ApprovalDate,
h2ApprovalRemarks = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.h2ApprovalRemarks,
h3ApprovalStatus = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.h3ApprovalStatus,
h3ApprovalDate = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.h3ApprovalDate,
h3ApprovalRemarks = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.h3ApprovalRemarks,
positionName = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.positionName,
positionNumber = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.positionNumber,
orgchart = personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.orgChartUrl,
l2approvaluserid = this.travelContext.EmployeeReportingLevels.Where(e => e.userId == personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.createdBy).FirstOrDefault().level2,
l3approvaluserid = this.travelContext.EmployeeReportingLevels.Where(e => e.userId == personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.createdBy).FirstOrDefault().level3,
h1approvaluserid = this.travelContext.EmployeeReportingLevels.Where(e => e.userId == personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.createdBy).FirstOrDefault().h1,
h2approvaluserid = this.travelContext.EmployeeReportingLevels.Where(e => e.userId == personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.createdBy).FirstOrDefault().h2,
h3approvaluserid = this.travelContext.EmployeeReportingLevels.Where(e => e.userId == personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.createdBy).FirstOrDefault().h3,
ID = modelId,
l2Name = this.travelContext.Employees.Where(emp => emp.userId == l2approvaluserid).FirstOrDefault().firstName,
},
// jobdescrip = personalother.Select(x => x.gjobdescription).Distinct().ToList()
}).FirstOrDefault();*
在
l2Name
属性中抛出了错误您可以这样做
Employee obj = new Employee()
{
userName="aaa@aa.com",
email=userName
}
var str = "aaa@aa.com"
Employee obj = new Employee()
{
userName=str,
email=str
}
在您的情况下,代码如下所示
var _l2approvaluserid = this.travelContext.EmployeeReportingLevels.Where(e => e.userId == personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.createdBy).FirstOrDefault().level2;
personalviewdetail = new PersonalRequestDisplayModel
{
....
l2approvaluserid = _l2approvaluserid;
....
l2Name = this.travelContext.Employees.Where(emp => emp.userId == _l2approvaluserid).FirstOrDefault().firstName,
}
但若我有类似的代码,我不会使用对象初始值设定项。如果出现任何问题,这会使调试更加困难 你可以这样做
Employee obj = new Employee()
{
userName="aaa@aa.com",
email=userName
}
var str = "aaa@aa.com"
Employee obj = new Employee()
{
userName=str,
email=str
}
在您的情况下,代码如下所示
var _l2approvaluserid = this.travelContext.EmployeeReportingLevels.Where(e => e.userId == personalother.FirstOrDefault(x => x.gpersonal.id == personalother.Key).gpersonal.createdBy).FirstOrDefault().level2;
personalviewdetail = new PersonalRequestDisplayModel
{
....
l2approvaluserid = _l2approvaluserid;
....
l2Name = this.travelContext.Employees.Where(emp => emp.userId == _l2approvaluserid).FirstOrDefault().firstName,
}
但若我有类似的代码,我不会使用对象初始值设定项。如果出现任何问题,这会使调试更加困难 对象初始值设定项块无法引用正在创建的对象,因为该对象尚不存在。这是编译器中的一个约束,您无法绕过它 我建议您通过构造函数注入值并在内部设置它。这样可以更好地保护不变量,并使类不可变
public class Employee
{
public Employee(string email)
{
UserName = email;
Email = email;
}
public string UserName { get; }
public string Email { get; }
}
编辑:如果用户名总是等于电子邮件地址,我甚至可能只做以下操作:
public class Employee
{
public Employee(string email)
{
Email = email;
}
public string UserName => Email;
public string Email { get; }
}
对象初始值设定项块无法引用正在创建的对象,因为该对象尚不存在。这是编译器中的一个约束,您无法绕过它 我建议您通过构造函数注入值并在内部设置它。这样可以更好地保护不变量,并使类不可变
public class Employee
{
public Employee(string email)
{
UserName = email;
Email = email;
}
public string UserName { get; }
public string Email { get; }
}
编辑:如果用户名总是等于电子邮件地址,我甚至可能只做以下操作:
public class Employee
{
public Employee(string email)
{
Email = email;
}
public string UserName => Email;
public string Email { get; }
}
哈哈,我知道有人这样回答。请稍候,我将编辑我的问题\@RameshRajendran:是的,因为这是Kai提到的最好的解决方案,它是一个编译器限制,从c#6开始你就无法逃脱。将来可能会有一种特殊的语法允许这样做。哈哈,我知道有人会给出这种类型的答案。请稍候,我将编辑我的问题\@RameshRajendran:是的,因为这是Kai提到的最好的解决方案,它是一个编译器限制,从c#6开始你就无法逃脱。将来可能会有一种特殊的语法允许这样做。您的
obj.userName
和userName
是不同的东西吗?userName
是一个局部变量吗?整理代码,然后指出哪一位实际上与你的问题相关。userName和userName
是不同的东西?userName
是一个局部变量吗?整理代码,然后指出哪一位与您的问题实际相关