C# - 将struct从一个对象传递到另一个对象

时间:2010-10-01 11:01:12

标签: c# struct

我正在尝试将结构从一个对象传递到另一个对象。我有以下代码:

    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

每个类中的结构都是声明的公共类变量,并且是相同的。

提前感谢您的帮助!

5 个答案:

答案 0 :(得分: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();

答案 1 :(得分:3)

嗯,并不是说它们必须是混淆的,它们必须具有相同的类型......不同命名空间中的两个相同的结构(相同的名称,相同的字段等)不能强制性地从一个转换为另一个。

要么从一个结构体到另一个结构体写一个implicit conversion,要么在任何地方使用相同的结构(这是推荐的方法)。

答案 2 :(得分:2)

  1. 删除其中一个结构的定义,并在两个地方使用相同的定义。最有可能的是,如果你在不止一个地方使用它,最好不要将它作为另一个类的成员。

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

  3. 除非你确定你想要选项2(并且你可能不会问这个问题),否则请选择选项1.

答案 3 :(得分:1)

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

答案 4 :(得分:0)

如果有两个eparate结构定义,则无论它们有多相似或相同,都无法将它们从一个转换为另一个。编译器会将其标记为错误。

自然要做的可能是只有一个结构定义(公开,在自己的.cs文件中定义),然后在两个地方使用它

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

相关问题