我定义了 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()
感谢您的帮助。
答案 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.LineData
到DataTableTools.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);