0

ServiceResponse オブジェクトに対する私の願いは、彼らが要求している「もの」を彼らに返したいということです。これは、パラメーターのないコンストラクターを持つクラスである限り、Foo のリスト、単に Foo、またはほぼ何でもかまいません。ただし、バイト配列 (byte[]) を返したい場合がありますが、それは構造体であり、明らかにパラメーターなしのコンストラクターを持たないため、許可されていません。

public class ServiceResponse<T> : ServiceResponse where T : new() {

    [DataMember]
    public T Result { get; set; }

    public ServiceResponse() {
        this.WasSuccessful = false;
        this.Result = new T();
        this.Exceptions = new List<CountyException>(); ;
    }

    public ServiceResponse(bool wasSuccessful, List<CountyException> exceptions, T result) {
        this.Result = result;
        this.WasSuccessful = wasSuccessful;
        this.Exceptions = exceptions;
    }
}

宣言行を次のように調整すると:

public class ServiceResponse<T> : ServiceResponse where T : new(), struct {

次のエラーが表示されます。

byte[] は、ジェネリック型メソッド ServiceResponse でパラメーター T として使用するために、パラメーターなしのパブリック コンストラクターを持つ非抽象型である必要があります

問題は、ジェネリックまたは構造体である T を取る単一のクラスを持つことができるかということです。入ったときにどんな種類か見なくてもいいんじゃないかな。

4

2 に答える 2

6

new()制約を取り除くだけです。C# に関する限り、すべてのnew T()構造体にはパラメーターなしのコンストラクターがあるため、where T : struct.

ただし、これは値型でbyte[]ないため、その制約を満たさないことに注意してください。

Resultコンストラクター内で設定を気にせずに、制約を付けずにそのままにしたくない理由はありますか? (またはdefault(T)、本当に必要な場合はに設定してください。)

于 2013-09-09T12:33:27.123 に答える