0

私がそのような構造体を持っているとしましょう:

public struct MyCustomDataset : IEnumerable<float> {
    public float v1;
    public float v2;
    public float v3;

    public MyCustomDataset(float v1, float v2, float v3) {
        this.v1 = v1;
        this.v2 = v2;
        this.v3 = v3;
    }

    // Enumerable impl
    public IEnumerator<float> GetEnumerator() {
        yield return v1;
        yield return v2;
        yield return v3;
    }
    IEnumerator IEnumerable.GetEnumerator() {
        return GetEnumerator();
    }
}

そしてこのような方法:

public static MyCustomDataset test() {
    return new MyCustomDataset(1,2,3);
}

public static void test2() {
    MyCustomDataset ds = test();
    /* doing stuff with ds */
}

MyCustomDatasetが構造体ではなくクラスであるかどうかよりも最適かどうかを知りたいです。アプリのメインループでtest()を呼び出すため、MyCustomDatasetはすべてのアプリの反復で割り当てられることを知っておく必要があります。そのため、パフォーマンスの自殺のようになるため、MyCustomDatasetをクラスにしません。structを使用することを検討しているのは、その場合、プリミティブ型のように動作できるのではないかと疑っているからです。

パフォーマンスは大丈夫ですか?

MyCustomDatasetをクラスフィールドに割り当てるつもりはありません。メソッド本体でのみ読み取り、いくつかのメソッド呼び出しに渡す可能性があるため、いくつかのローカルスコープに存在します。

4

1 に答える 1

2

君は:

演技の自殺みたいだから

どうしてそう思うの?参照している構造体とクラスの違いは何ですか?

多かれ少なかれ「プリミティブ型」(あなたの言葉)のように感じる場合は、構造体を使用する必要があると思います。これは 3 つのfloat値 (おそらく合計 96 ビット) であるため、値型としては十分小さいです。ただし、構造体に固執する場合は、フィールドを作成してreadonlyください。

于 2013-01-17T16:28:47.070 に答える