c#struct in function not assignable

时间:2016-05-24 03:37:42

标签: c# struct

我定义了 public enum LineType { Red,//angle<th,L>th Green,//L<th Blue,//angle>th,L>th none } public struct LineData { public double angle; public double length; public LineType lineType; public int number; } 这样的

DataTableTools

在另一个名为function的班级中,我定义了class DataTableTools { public enum LineType { Red,//angle<th,L>th Green,//L<th Blue,//angle>th,L>th none } public struct LineData { public double angle; public double length; public LineType lineType; public int number; } public bool InsertData(LineData lineData) { ... return true; } }

function

但是,当我在主对话框中调用DataTableTools dtTools=new DataTableTools(); bool b=dtTools.InsertData(lineData); 时:

An error occurred: Argument type '...MainDialog.LineData' is not assignable to parameter type 'DataTableTools.LineData'.
I really confused about it. Why LineData type was different in different class?

findmultiple()

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

DataTableTools类中的LineData结构是调用Nested Type。它通常用于隐含概念this nested struct/class is only use for this class,因此类 DataTableTools 会将InsertData()中的参数struct LineData 识别为DataTableTools.LineData。这与您在 MainDialog 类中定义的MainDialog.LineData明显不同。

对于您的情况,您应该使用

DataTableTools dtTools=new DataTableTools();
DataTableTools.LineData  lineData = new DataTableTools.LineData ();
//Do something with lineData 
bool b=dtTools.InsertData(lineData);

第二个解决方案可能是c-sharp-convert-struct-to-another-struct,从结构MainDialog.LineDataDataTableTools.LineData

答案 1 :(得分:0)

是否有可能意外地重新声明了你的枚举和结构。你的意思是将你的课程更像这样:

class DataTableTools
{
    public LineType LineType { get; set; }
    public LineData LineData { get; set; }

    public bool InsertData(LineData lineData)
    {
        this.LineData.angle = lineData.angle
        ...
        return true;
    }
}

这可以让你做这样的事情:

DataTableTools dtTools=new DataTableTools();
bool b=dtTools.InsertData(lineData);