C#式コンストラクトの使用を開始しましたが、次の状況でジェネリックスがどのように適用されるかについて質問があります。
MyObject
多くの異なるタイプの基本クラスであるタイプがあると考えてください。このクラスの中には、次のコードがあります。
// This is a String Indexer Expression, used to define the string indexer when the object is in a collection of MyObjects
public Expression<Func<MyObject, string, bool>> StringIndexExpression { get; private set;}
// I use this method in Set StringIndexExpression and T is a subtype of MyObject
protected void DefineStringIndexer<T>(Expression<T, string, bool>> expresson) where T : MyObject
{
StringIndexExpression = expression;
}
これは私が使用する方法ですDefineStringIndexer
:
public class MyBusinessObject : MyObject
{
public string Name { get; set; }
public MyBusinessObject()
{
Name = "Test";
DefineStringIndexer<MyBusinessObject>((item, value) => item.Name == value);
}
}
ただし、内部の割り当てではDefineStringIndexer
、コンパイルエラーが発生します。
タイプSystem.Linq.Expression.Expression<MyObject、string、bool>をSystem.Linq.Expression.Expression <MyBusinessObject、string、bool>>に暗黙的に変換することはできません。
この状況でジェネリックをC#式で使用できますか?ラムダ内にMyObjectをキャストしないように、DefineStringIndexerでTを使用したいと思います。