类的属性
本文关键字:属性 | 更新日期: 2023-09-27 17:55:54
我有两个类和一个这样的方法:
public class Class1
{
public int Id { get; set; }
public string Name { get; set; }
public Class2 Params { get; set; }
}
public class Class2
{
public string Param1 { get; set; }
public string Param2 { get; set; }
public string Param3 { get; set; }
}
private Class1 GetData(SqlDataReader reader)
{
var model = new Class1
{
Id = Convert.ToInt32(reader["ID"]),
Name = reader["Name"].ToString(),
Class2.
};
}
为什么我看不到Class2
的属性?
您需要
创建一个Class2
的instance
。您的Params
对象需要像这样初始化Class1
:
var model = new Class1
{
Id = Convert.ToInt32(reader["ID"]),
Name = reader["Name"].ToString(),
};
model.Params = new Class2();
model.Params.Param1 = "param1";
因为当你使用Class2.
时,你引用的是类本身,而不是类的实例。
您必须将Class2
声明为 static
,或者在您的情况下创建它的实例:
private Class1 GetData(SqlDataReader reader)
{
var model = new Class1
{
Id = Convert.ToInt32(reader["ID"]),
Name = reader["Name"].ToString(),
Params = new Class2 { Param1 = "foo", Param2 = "bar", Param3 = "other" }
};
}
Class1 没有名为 Class2 的属性。 您将类 1 上的类型"Class2"的属性称为"参数"。 所以你会像这样引用它:
private Class1 GetData(SqlDataReader reader)
{
var model = new Class1
{
Id = Convert.ToInt32(reader["ID"]),
Name = reader["Name"].ToString(),
Params = new Class2 {
Param1 = ...
}
};
}
Dave是正确的。 使用代码执行此操作的最简单方法如下
private Class1 GetData(SqlDataReader reader)
{
var model = new Class1
{
Id = Convert.ToInt32(reader["ID"]),
Name = reader["Name"].ToString(),
Params = new Class2()
};
}
你应该做这样的事情:
Class2 = new Class2() { ...}
类 1 的 Params 属性永远不会分配给任何内容,因此将始终为 null。
此外,类 1 中的属性访问器是参数,所以它应该是......
private Class1 GetData(SqlDataReader reader)
{
var model = new Class1
{
Id = Convert.ToInt32(reader["ID"]),
Name = reader["Name"].ToString(),
Params = new Class2() { Param1 = "foo", Param2 = "bar" }
};
}