2

我有两个类和一个这样的方法:

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

4

6 回答 6

4

您需要创建一个instanceof Class2。您的Params对象Class1需要像这样初始化:

var model = new Class1
{
    Id = Convert.ToInt32(reader["ID"]),
    Name = reader["Name"].ToString(),
};
model.Params = new Class2();
model.Params.Param1 = "param1";
于 2013-01-23T19:23:46.733 回答
4

因为当您使用时,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" }
    };
}
于 2013-01-23T19:24:58.197 回答
2

Class1 没有名为 Class2 的属性。您将 Class1 上的类型为“Class2”的属性称为“Params”。所以你会像这样引用它:

private Class1 GetData(SqlDataReader reader)
{
var model = new Class1
    {
        Id = Convert.ToInt32(reader["ID"]),
        Name = reader["Name"].ToString(),
        Params = new Class2 {
           Param1 = ...
        }
    };
}
于 2013-01-23T19:25:09.007 回答
0

你应该这样做:

Class2 = new Class2() { ...}
于 2013-01-23T19:25:00.630 回答
0

戴夫是正确的。使用您的代码执行此操作的最简单方法如下

private Class1 GetData(SqlDataReader reader)
{
    var model = new Class1
    {
        Id = Convert.ToInt32(reader["ID"]),
        Name = reader["Name"].ToString(),
        Params = new Class2()
     };
 }
于 2013-01-23T19:25:31.533 回答
0

Class1 的 Params 属性永远不会分配给任何东西,因此将始终为空。

此外,Class1 中的属性访问器是 Params,所以它应该是......

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" }
    };
}
于 2013-01-23T19:25:56.930 回答