如何将List <user-defined object =“”>传递给构造函数</user-defined>

时间:2015-03-09 00:04:14

标签: c# list generics constructor arguments

我是C#的新手......

我正在尝试使用&#39;构造方法&#39;

在表单之间传递对象

以下是被调用/被调用类的构造函数:

public frmPeripheralOptions(List<PeriphItem> PeriphSelect)
{
    // code...
}

这是调用代码:

frmPeripheralOptions PeriphForm = new frmPeripheralOptions(PeriphSelect);

这些是我在上面一行收到的编译时错误: C#不允许我将PeriphSelect作为参数插入构造函数。

  

错误1最佳重载方法匹配   &#39; BingP3.frmPeripheralOptions.frmPeripheralOptions(System.Collections.Generic.List)&#39;   有一些无效的参数C:\ Users \ scott \ Documents \ Visual Studio   2013 \ Projects \ BingP3 \ BingP3 \ frmComputerOrder.cs 200 47 BingP3

     

错误2参数1:无法转换   &#39; System.Collections.Generic.List&#39;   至   &#39; System.Collections.Generic.List&#39; C:\用户\斯科特\文档\ Visual   Studio 2013 \ Projects \ BingP3 \ BingP3 \ frmComputerOrder.cs 200 72 BingP3

这是列表的定义。它在两个类中都是相同的定义:

public struct PeriphItem
{
    public int pos;
    public int qty;
    public string entry;
}

public System.Collections.Generic.List<PeriphItem> PeriphSelect { get; set; }

列表在调用类的默认构造函数中初始化,如下所示:

PeriphSelect = new List<PeriphItem>();

这里的目标是能够从两个类中访问PeriphSelect列表的相同迭代。

我已成功将列表传递给当前项目中的构造函数,但它们是标准对象的列表,例如List<Int> and List`,但不是用户定义对象的列表。

2 个答案:

答案 0 :(得分:0)

创建列表时无法推断类型。 这将是代码:

using System.Collections.Generic;
public class frmPeripheralOptions
{
    public frmPeripheralOptions(List<PeriphItem> periphSelect)
    {
        this.PeriphSelect = periphSelect;
    }
    public List<PeriphItem> PeriphSelect { get; set; }
}

public static Main(string[] args)
{
    var periphList = new List<PeriphItem>();
    var form = new frmPeripheralOptions(periphList);
}

这应该有效。

答案 1 :(得分:0)

您将任何对象视为相同,无论是系统提供的还是您创建的对象。对象是对象。您想要创建一个List并告诉它将其视为一个列表。例如:

private List<YourClass> myList = new List<YourClass>();

或者,因为你在其他地方初始化它(我不太注意)...

private List<YourClass> myList;
public Constructor()
{
    myList = new List<YourClass>();
}

当你把它传递给另一个班级时,你还必须告诉它它里面有什么样的价值,如下:

void Invoker()
{
    YourNewClass newClass = new YourNewClass(myList); // the same list you earlier defined.
}
// your new class:
public YourNewClass(List<YourClass> l)
{
    // do whatever
}

希望这就是你想要的! :)