2010-10-01 71 views
4

我试图从一个对象传递一个结构到另一个对象。我有以下代码:C# - 将结构从一个对象传递到另一个对象

private void mainMenuStripNewProject_Click(object sender, EventArgs e) 
    { 
     frmNewProject frmNewProject = new frmNewProject(this); 
     if (frmNewProject.ShowDialog() == DialogResult.OK) 
     { 
      StructProjectSettings tempProjectSettings = frmNewProject.getSettings(); 
      newProjectEvent(tempProjectSettings);     //Fetchs settings from the new project form 
     } 
    } 

不过,我得到以下错误:

错误14无法隐式转换类型 'NathanUpload.frmNewProject.StructProjectSettings' 到 'NathanUpload.Main.StructProjectSettings' O:\回到名单Daten \ Visual Studio 2010 \ Projects \ NathanUpload \ NathanUpload \ Main.cs 43

在每个类中的结构被声明为公共类变量并且是相同的。

感谢您的帮助!

回答

9

你是否在每个类中定义了实际的结构?

即使您对它们使用相同的名称,编译器也不会将它们视为相同的类型。

您必须在一个位置定义结构,并从需要使用它的两个类中创建它的对象。

一个例子

public class A{ 
    public struct MyStruct{ 
    ... 
    } 
} 

public class B{ 
    public struct MyStruct{ 
    ... 
    } 
} 

A.MyStruct struct1 = new B.MyStruct(); 

这是不允许的,这实际上是你正在尝试做的。我建议将该结构移出该类,并将其放在两个类都可以访问的地方。

定义它像这样反而

public struct MyStruct{ 
    ... 
} 

public class A{ 
    ... 
} 

public class B{ 
    ... 
} 

MyStruct struct1 = new MyStruct(); 
3

嗯,这并不是说他们必须张玉峰,他们必须有相同的类型......两个相同的结构(相同的名字,相同的字段,等等。 )在不同的命名空间中不能不经意地从一个转换到另一个。

要么你写一个implicit conversion从一个结构到另一个,或者你使用相同的地方(这将是推荐的做法)。

1

这些是两个不同的结构;事实上它们的定义并不重要......它们是不同的。您需要在代码中使用其中一种。

0

如果有两个独立的结构体定义,那么无论它们有多相似或相同,都不能从一个转换为另一个。编译器会将其标记为错误。

自然的事情很可能是只有一个结构定义(将其公开,在其自己的cs文件定义它),然后在这两个地方

使用它或者你可以有自己的转换方法。如果你需要做这个“左手 - 右手”的东西很多,那么我肯定会推荐像http://automapper.codeplex.com/这样的东西,尽管我相信它只能对物体进行操作。

2

选项

  1. 删除结构的一个定义,并在这两个地方使用相同的定义。最有可能的是最好不要让它作为另一个班级的成员,而是你在多个地方使用它。

  2. 为一个结构创建一个构造函数,该构造函数接受要复制的实例并复制所有值。有时候这很有用(如果结构体具有不同的成员方法和重叠但不同的目的),但大多数情况下这只是浪费开发人员和执行时间的一种愚蠢的方式。

除非你确定要选择2(你可能就不会问这个问题,如果你是),去选择1

相关问题