我真的很陌生,所以我希望我的问题不是愚蠢的。
我有这样的情况:
Public class ClassName
{
public ClassName(){}
public string Name {get; set;}
public SomeOtherClass class {get; set;}
}
public class SomeOtherClass ()
{
public int StatusId {get; set;}
public string StatusDesc { get; set;}
}
现在这两个类都在一个cs文件中。 我想通过ClassName访问SomeOtherClass的属性。
我该怎么做?
非常感谢。
我认为我需要添加控制器以使其更清晰:
这是控制器功能:
public void UpdateSession(SessionDetails requestModel)
{
using (Entities tokus = new Entities())
{
var sessionDetails = requestModel;
switch (sessionDetails.ServiceType)
{
case "Provider Service":
var fafa = new ClassName();
fafa.SessionID = sessionDetails.SessionID;
fafa.SessionStatusID = sessionDetails.SessionStatus;
fafa.StartDate = sessionDetails.StartDate;
fafa.EndDate = sessionDetails.EndDate;
fafa.class.AttendanceStatusID = sessionDetails.subclassfromSessionDetails.AttendanceStatus;
UpdateServiceLog(fafa);
最后一个fafa.Providers.AttendanceStatusID = sessionDetails.staff.AttendanceStatus;给我一些未定义的线条作为错误。为什么它不能识别这个子类???
UpdateServiceLog是另一个需要ClassName作为输入的函数。
答案 0 :(得分:1)
好的,首先,我想快速概述原始代码中的错误,以帮助您了解为什么会出现波浪线......
Public class ClassName // "Public" needs to be lowercase
{
public ClassName(){}
public string Name {get; set;}
public SomeOtherClass class {get; set;} // "class" is a reserved word and
// can't be used as a property name.
// You're probably getting a squiggly here.
}
public class SomeOtherClass () // A class declaration doesn't end in parentheses
// This will give you some more squigglys.
{
public int StatusId {get; set;}
public string StatusDesc { get; set;}
}
以下是更正后的代码:
public class ClassName
{
public ClassName() { }
public string Name { get; set; }
public SomeOtherClass OtherClass {get; set;}
}
public class SomeOtherClass
{
public int StatusId { get; set; }
public string StatusDesc { get; set; }
}
现在您可以在控制器中使用这些类:
switch (sessionDetails.ServiceType)
{
case "Provider Service":
var foo = new ClassName();
foo.Name = sessionDetails.SessionName;
foo.OtherClass.StatusId = sessionDetails.subclassfromSessionDetails.SessionStatusId;
foo.OtherClass.StatusDesc = "Kerfuffle";
break;
// More cases here...
}
请注意,我已使用您在原始代码中提供的属性来指出语法错误。从您的控制器代码中可以看出,您最终将拥有不同的属性名称(SessionStatusID
,StartDate
等)。由于我不知道sessionDetails
中的属性类型可能存在类型不匹配,因此请将上述代码纯粹作为分配值的进程的示例。
答案 1 :(得分:0)
一个类通常代表一个真实世界的对象,例如" car"。如果你有十辆车,那么你需要十个汽车类的实例。如果使用此模式,则需要在第一个类中创建SomeOtherClass的实例才能使用它。你已经在你的例子中做过了 - 你有一个SomeOtherClass的实例叫做" class"。要访问其中一个属性,您可以说class.StatusID或class.StatusDesc。
Public class ClassName
{
public ClassName(){}
public string Name {get; set;}
public SomeOtherClass class {get; set;}
public bool SampleMethod()
{
if (class.StatusId == 1)
return true;
else
return false;
}
}
public class SomeOtherClass ()
{
public int StatusId {get; set;}
public string StatusDesc { get; set;}
}
请注意,如果你有10个SomeOtherClass类型的变量,它们都可以有不同的StatusId,就像十种不同的汽车可以有十种不同的颜色一样。您深入研究您感兴趣的特定实例。
答案 2 :(得分:0)
这是介绍性内容,我强烈推荐教程并浏览MSDN。
你基本上有三种选择。您可以使用已有的代码并以这种方式检查属性:
var x = new ClassName();
var whatWeWant = x.SomeOtherClass.StatusID;
您可以这样做,因为它是public
属性。
在其他情况下,inherit
会更好。如果一个类是另一个类的子类(即" Automobile"作为超类," Sedan"作为子类),则可以这样做
Public class ClassName : SomeOtherClass
{
public ClassName()
{
public string Name {get; set;}
public SomeOtherClass class {get; set;}
}
public class SomeOtherClass ()
{
public int StatusId {get; set;}
public string StatusDesc { get; set;}
}
并调用该属性,就好像它只是ClassName的一部分:
var x = ClassName.StatusId;
最后,您可以声明一个为static
。 Static
类,值和方法在概念上类似于" global
"。你没有实例化它们,但你几乎可以在任何地方调用它们。需要注意的是,它们的价值仍然存在;如果两个东西调用相同的static
属性,它们将获得相同的值。如果不需要,您需要上述方法。
Public class ClassName
{
public ClassName()
{
public string Name {get; set;}
public SomeOtherClass class {get; set;}
public string GetOtherClass()
{ return SomeOtherClass.StatusDesc; }
}
public static class SomeOtherClass ()
{
public static int StatusId {get; set;}
public static string StatusDesc { get; set;}
}
答案 3 :(得分:0)
在更好地查看我的代码后,我意识到我有一个List的实例,因此我的映射无法正常工作。 所以,如果我有一个班级的实例作为财产,@ Kasun Koswattha方法是正确的。 因此,因为它是一个List,我必须在我的控制器中执行此操作:
TOK_ServiceLog fafa = new TOK_ServiceLog();
fafa.Providers = sessionDetails.staff.Select(s => new TOK_ServiceLog_Provider()
{
StaffID = s.StaffID,
ServiceID = s.ServiceID,
AttendanceStatusID = s.AttendanceStatusID,
IsSubstituted = s.IsSubstituted,
SubstituteStaffID = s.SubstituteStaffID,
Comments = s.Comments
}).ToList();
NOte:提供商和员工都是列表。 其余的属性是直接分配的:
fafa.SessionID = sessionDetails.SessionID;
fafa.SessionStatusID = sessionDetails.SessionStatus;
fafa.StartDate = sessionDetails.StartDate;
fafa.EndDate = sessionDetails.EndDate;
fafa.ServiceName = sessionDetails.ServiceName;
再次感谢您的所有输入。
答案 4 :(得分:-2)
首先,您需要从两个类创建新对象。然后将Someotherclass分配给Classname类中的属性。然后,您可以访问SomeotherClass的属性。请参阅以下代码。
var className= new ClassName()
{
SomeOtherClass=new SomeOtherClass()
};
var statisId=className.SomeOtherClass.StatusId;
如果这可以解决您的问题,请告诉我。