Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 类的性质_C# - Fatal编程技术网

C# 类的性质

C# 类的性质,c#,C#,我有两个类和这样一个方法: 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 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
实例。
Class1
Params
对象需要初始化如下:

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" }
    };
}

你应该做以下事情:

Class2 = new Class2() { ...}

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 = ...
        }
    };
}

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

private Class1 GetData(SqlDataReader reader)
{
    var model = new Class1
    {
        Id = Convert.ToInt32(reader["ID"]),
        Name = reader["Name"].ToString(),
        Params = new Class2()
     };
 }

Class1的Params属性从未分配给任何对象,因此将始终为null

而且,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" }
    };
}