ValueTypes、Strings、または Nullable 値の型をチェックするように、ジェネリック メソッドに制約を追加しようとしています。
問題はそれです:
- 値の型は支柱です
- 文字列は不変の参照型です
- nullable は値型ですが、「where S : struct」型制約では受け入れられません。
一般的な制約でこれらの型のみを受け入れる方法があるかどうか、誰かが知っていますか?
Expression<Func<T, S>
問題は、特定のオブジェクトのこれらの型のプロパティを表すパラメーターを受け入れようとしていることです。
機能は次のようになります (コードは意味をなさないことに注意してください。私が探しているものを簡単に理解するためのものです)。
public class Person
{
public string Name {get; set;}
public DateTime? DOB {get; set;}
public int NumberOfChildren {get; set;}
public Car CurrentCar {get; set;}
}
---
internal void MyGenericMethod<T, S>(T myObject, Expression<Func<T, S> property){...}
Person myPerson = new Person();
MyGenericMethod(myPerson, p => p.Name); //S would be a string
MyGenericMethod(myPerson, p => p.DOB); //S would be a DateTime?
MyGenericMethod(myPerson, p => p.NumberOfChildren); //S would be a struct
上記の 3 つの呼び出しはすべて受け入れられる必要がありますが、次の呼び出しは受け入れられません。
MyGenericMethod(myPerson, p => p.CurrentCar); //S would be a class and shouldn't compile
前もって感謝します
更新: アントンとマークに感謝します。MyGenericMethod には、追加のパラメーターを受け入れる 4 つの異なる署名があります。そのため、既存の 4 つのそれぞれに対して 3 つの異なる (構造体、nullable、文字列) を作成するという考えは好きではありません。これは維持するのに悪夢です!