0

C# の仕様では、オブジェクト (または構造体) の初期化子構造内からメソッドを呼び出すことはできませんか?

私が尋ねている理由は、LINQ-to-XML ステートメントを使用して初期化子内でゲーター データを使用しようとしていたからです。これは動作しません。ただし、手動でローカル変数に保存する前にデータを取得すると、問題なく動作します。コードのエラーをすでに把握しているので、なぜこれが起こるのか疑問に思っていました。

動作しません:

SavedData sData = new SavedData()
{
        exportLocation = data.Root.Descendants("ExportLocation").FirstOrDefault().Value,
        exportType = (ExportType)data.Root.Descendants("ExportType").FirstOrDefault().Value
};

作品:

var exLoc = data.Root.Descendants("ExportLocation").FirstOrDefault().Value;
ExportType type = (ExportType)data.Root.Descendants("ExportType").FirstOrDefault().Value;

Saved Data sData = new SavedData()
{
     exportLocation = exLoc,
     exportType = type
};
4

1 に答える 1

1

イニシャライザ内でメソッドを呼び出すことができるため、ここでは別の処理が行われています。

以下は私にとってはうまくいきます:

    class A
    {
        public int x { get; set; }
    }

    class B
    {
        public int foo()
        {
            return 3;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            B data = new B();
            A a = new A() {
                x = data.foo()
            };
        }
    }

ax は 3 に設定されるため、正常に動作します。

コードを書き直したときに修正されたコードの別の問題である可能性があります。また、SavedData コンストラクターがデータを無効にすることを行っている可能性もあります。

于 2014-01-06T22:31:19.520 に答える