簡體   English   中英

C# - 將struct從一個對象傳遞到另一個對象

[英]C# - Passing struct from one object to another

我正在嘗試將結構從一個對象傳遞給另一個對象。 我有以下代碼:

    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

每個類中的結構都聲明為公共類變量,並且是相同的。

我在這里先向您的幫助表示感謝!

你有沒有在每個類中定義實際的struct?

即使您對它們使用相同的名稱,編譯器也不會將它們視為相同的類型。

您必須在一個地方定義結構,並從需要使用它的兩個類中創建它的對象。

一個例子

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. 刪除其中一個結構的定義,並在兩個地方使用相同的定義。 最有可能的是,如果你在不止一個地方使用它,最好不要將它作為另一個類的成員。

  2. 為一個結構創建一個構造函數,該結構采用被復制的實例並復制所有值。 有時這很有用(如果結構具有不同的成員方法和重疊但不同的目的),但大多數情況下,它只是浪費開發人員和執行時間的愚蠢方式。

除非你確定你想要選項2(你可能不會問這個問題),請選擇選項1。

這是兩種不同的結構; 他們被平等定義的事實並不重要......他們是不同的。 您需要在代碼中使用其中一個。

如果有兩個eparate結構定義,則無論它們有多么相似或相同,您都無法將它們從一個轉換為另一個。 編譯器會將其標記為錯誤。

自然要做的可能是只有一個結構定義(公開,在自己的.cs文件中定義),然后在兩個地方使用它

或者,您可以擁有自己的轉換方法。 如果你需要做很多“左手 - 右手”的東西,那么我肯定會推薦像http://automapper.codeplex.com/這樣的東西,雖然我相信它只適用於物體。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM