1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CS1690:参照マーシャリング クラスのフィールドであるため、'member' のメンバーにアクセスすると、ランタイム例外が発生する可能性があります

Last updated at Posted at 2021-05-26

#開発中に警告が発生
C#でフォーム間をまたぐ変数を使用するプログラムを開発中に、以下の警告メッセージが発生しました。
おや、と思って調べてみるも、いまいちピンとくるものがありません。

CS1690:参照マーシャリング クラスのフィールドであるため、'frm.struct1' のメンバーにアクセスすると、ランタイム例外が発生する可能性があります。

#ソースをみると

Form1.cs
using (Form2 frm = new Form2())
{
    frm.ShowDialog();
    result = frm.struct1.a;
}
Form2.cs
public struct STRUCT1
{
    public int a { get; set; }
    public int b { get; set; }
    public int c { get; set; }
}
public STRUCT1 struct1;

#あっ、構造体変数がプロパティじゃない
よく見ると構造体内の変数(a, b, c)はプロパティになっていますが、構造体変数(struct1)側がプロパティになっていません。基本的にフォーム間の変数はプロパティでやりとりするため、構造体変数をプロパティにする必要がありそうです。

#修正してみた

Form1.cs
using (Form2 frm = new Form2())
{
    frm.ShowDialog();
    result = frm.struct1.a;
}
Form2.cs
public struct STRUCT1
{
    public int a;
    public int b;
    public int c;
}
public STRUCT1 struct1 { get; set; }

これで警告は解消されました。めでたしめでたし。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?