错误CS1729,我做错了什么?

时间:2017-02-01 12:24:17

标签: c# .net

我有两个类,Fields和FieldValues:Fields如下:

enum FieldType
{
    Boolean,
    Integer,
    String
}

class Fields
{
    public FieldType type { get; set; }
    public string name { get; set; }

    public string GetFieldDeclaration()
    {
        switch (type)
        {
            case FieldType.Boolean:
                return name + " tinyint(1)";
            case FieldType.Integer:
                return name + " int";
            case FieldType.String:
                return name + " varchar(2048)";
            default:
                return string.Empty;
        }
    }

和FieldValues:Fields

class FieldValues:Fields
{
    public Dictionary<int, string> dictionary { get; set; }

    FieldValues(FieldType newType, string newName)
    {
        type = newType;
        name = newName;
        dictionary = new Dictionary<int, string>();
    }

这些类表示将从xls中提取并插入数据库的一些值。在主程序中,

List<Fields> tableFields = new List<Fields>()
        {
            new Fields() { name = "id", type = FieldType.Integer },
            new Fields() { name = "ECE", type = FieldType.Boolean },
            new Fields() { name = "TC", type = FieldType.Boolean },
            new Fields() { name = "Categories", type = FieldType.String },
        };



        string createQuery = "CREATE TABLE `poi_specs_mgu_ece_1.6` (";

        //creaza tabelul in functie de cate field-uri(coloane) sunt in lista
        for(var i = 0; i < tableFields.Count; i++)
        {
            createQuery += "\n\t" + tableFields[i].GetFieldDeclaration() + (i == tableFields.Count - 1 ? string.Empty : ",");
        }
        createQuery += "\n);";

        //[WORK]create insert statement

        List<FieldValues> fieldValues = new List<FieldValues>()
        {
            new FieldValues(tableFields[0]) {
                dictionary = new Dictionary<int, string>()
                {
                    {0, "test" },
                    {1, "test" },
                    {2, "test" },
                    {3, "test" },
                    {4, "test" },
                    {5, "test" }
                }

            },
            new FieldValues(tableFields[1]) {
                dictionary = new Dictionary<int, string>()
                {
                    {0, "x" },
                    {1, "x" },
                    {2, " " },
                    {3, "x" },
                    {4, " " },
                    {5, "x" }
                }

            },
            new FieldValues(tableFields[2]) {
                dictionary = new Dictionary<int, string>()
                {
                    {0, "x" },
                    {1, "x" },
                    {2, "x" },
                    {3, "x" },
                    {4, " " },
                    {5, "x" }
                }

            },
            new FieldValues(tableFields[3])  {
                dictionary = new Dictionary<int, string>()
                {
                    {0, "Car" },
                    {1, "Travel" },
                    {2, "Stopping Possibilities" },
                    {3, "Petrol Stations" },
                    {4, "Rest Areas" },
                    {5, "Travel" }
                }

            },
        };

        string createQuery2 = createQuery + "\n INSERT INTO `poi_specs_mgu_ece_1.6` (";

        for (var i = 0; i < tableFields.Count; i++)
        {
            createQuery2 += "\n\t" + tableFields[i].GetFieldDeclaration() + (i == tableFields.Count - 1 ? string.Empty : ",");
        }
        createQuery2 += ")\n VALUES ( ";



        for (var i = 0; i < fieldValues.Count; i++)
        {
            for (var j = 0; j < fieldValues[i].dictionary.Count; j++)
            {
                createQuery2 += "\n\t" + fieldValues[i].dictionary[j];
            }
        }
        createQuery2 += " \n);";
        File.WriteAllText("output.txt", createQuery2);
        Console.WriteLine(createQuery2);
        Console.ReadKey();

编译时出现以下错误:

  

错误CS1729&#39; FieldValues&#39;不包含带有1个参数的构造函数。

我真的不明白为什么FieldValues的构造函数在这里不起作用。

4 个答案:

答案 0 :(得分:4)

您的班级FieldValues有以下(非公开btw。)构造函数:

FieldValues(FieldType newType, string newName)

但是你这样称呼它:

new FieldValues(tableFields[0])

因此错误。你可能也想传递这种类型,例如:

new FieldValues(FieldType.String, tableFields[0])

或添加另一个暗示特定类型的构造函数,例如:

public FieldValues(string newName)
{
    type = FieldType.String;
    name = newName;
    dictionary = new Dictionary<int, string>();
}

或者(正如@JeppeStigNielsen指出的那样)

public FieldValues(string newName) : this(FieldType.String, newName)

或者您移动type参数并将其设为可选

public FieldValues(string newName, FieldType newType = FieldType.String)

另一方面,"penis"在开发过程中不是一个好的占位符文本,你可能会忘记把它拿出来(双关语并非意图)。我已经冒昧地在你的问题中用"test"替换它。

答案 1 :(得分:1)

您的错误告诉您有一个构造函数声明为:

FieldValues(FieldType newType, string newName)

并尝试仅使用1个参数调用它:

new FieldValues(tableFields[2]) 

您可以使用接受1参数的构造函数重载构造函数,或者在调用它时需要给出第二个参数。

修改

一个解决方案也可能是使用一个可以传递类型为Fields的变量作为参数的构造函数重载构造函数。

class FieldValues:Fields
{
    public Dictionary<int, string> dictionary { get; set; }

    public FieldValues(FieldType newType, string newName)
    {
        type = newType;
        name = newName;
        dictionary = new Dictionary<int, string>();
    }

    public FieldValues(Fields values)
    {
        type = values.type;
        name = values.name;
        dictionary = new Dictionary<int, string>();
    }

然后你仍然可以自己分配字典。

List<FieldValues> fieldValues = new List<FieldValues>()
{
    new FieldValues(tableFields[0]) {
        dictionary = new Dictionary<int, string>()
        {
            {0, "test" },
            {1, "test" },
            {2, "test" },
            {3, "test" },
            {4, "test" },
            {5, "test" }
        }

    },

<强> EDIT2:

正如我刚认识的那样。重载不起作用,因为在你的帖子中你的构造函数不是public!这对于能够从任何其他类调用它至关重要。我在答案中纠正了这个错误。

答案 2 :(得分:0)

您的FieldValues的Ctor有两个参数,FieldType newType和s tring newName。您仅使用一个参数调用它:new FieldValues(tableFields[0])

你想要的可能是:

new FieldValues(tableFields[0].Type, tableFields[0].Name)

答案 3 :(得分:0)

非常感谢您的支持。我像这样重载了构造函数

public FieldValues(string newName)
{
    type = FieldType.String;
    name = newName;
    dictionary = new Dictionary<int, string>();
}

和这样的字典部分

new FieldValues(tableFields[0].ToString()) {
                    dictionary = new Dictionary<int, string>()
                    {
                        {0, "test" },
                        {1, "test" },
                        {2, "test" },
                        {3, "test" },
                        {4, "test" },
                        {5, "test" }
                    }

我知道这是noob的东西,但它帮助了我,因为我是c#的新手。 但是,生活和学习。