是否有一种正确的方法来菊花链式连接并以正确的方式调用它?

fle*_*sod 1 c# class

我正在创建类层次结构树,以便在键入对象路径时使它们在Intellisense中更有条理,更易于阅读.例如,像"System.IO.FileStream()".

我注意到它在我使用var时有效,但是当我使用完整的类命名时它不起作用.另外我注意到当我使用List <>对象时它不起作用.任何人都可以向我解释为什么以及我做错了什么.谢谢...

public class Vehicle
{
    public string Year { get; set; }
    public string Make { get; set; }
    public string Model { get; set; }
    public string Trim { get; set; }
}
public class Dealer
{
    public Vehicle VehicleData { get { return new Vehicle(); } set; }
}
Run Code Online (Sandbox Code Playgroud)

这个有效...

var vehicle = new Dealer().VehicleData;
vehicle.Year = "2007";
vehicle.Make = "Ford";
Run Code Online (Sandbox Code Playgroud)

这一个不起作用......

Dealer().VehicleData vehicle = new Dealer().VehicleData;
vehicle.Year = "2004";
vehicle.Make = "Buick";
Run Code Online (Sandbox Code Playgroud)

这个也不起作用......

var vehicles = new List<Dealer().VehicleData>();
vehicles.Add(
    new Dealer().VehicleData {
        Year = "2001", 
        Make = "Toyota"
    }
);
vehicles.Add(
    new Dealer().VehicleData {
        Year = "2003", 
        Make = "Volvo"
    }
);
Run Code Online (Sandbox Code Playgroud)

ang*_*son 7

Dealer().VehicleData 不是一种类型,它是一种财产.

您不能将变量声明为type 属性.

这就像这样没有意义:

public class Person
{
    public string Name { get; set; }
}

...
new Person().Name test;
Run Code Online (Sandbox Code Playgroud)

注意这一行:

var vehicle = new Dealer().VehicleData;
Run Code Online (Sandbox Code Playgroud)

实际上意味着与行相同:

Vehicle vehicle = new Dealer().VehicleData;
Run Code Online (Sandbox Code Playgroud)

另请注意,在这种情况下,您不是存储对经销商的引用,而是仅存储到车辆,因此您应该像这样编写上述代码:

var vehicle = new Vehicle();
Run Code Online (Sandbox Code Playgroud)

你真的在寻找命名空间的概念吗?

这个:

System.IO.FileStream()
Run Code Online (Sandbox Code Playgroud)

实际上必须像这样使用:

new System.IO.FileStream()
Run Code Online (Sandbox Code Playgroud)

部分如下:

 +----------------------+---- calling the constructor of FileStream
 |                      |
v+v                     vv
new System.IO.FileStream()
    ^---+---^ ^----+---^
        |          |
        |          +-- the name of the class
        |
        +-- the namespace of the FileStream class
Run Code Online (Sandbox Code Playgroud)

申报:

namespace System.IO
{
    public class FileStream
    {
        public FileStream()
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

(请注意,FileStream实际上没有无参数构造函数,所以上面实际上是错误的,但是你得到了要点)