これは仕事ととしてOKですラムダパラメータを使用するときに型宣言を減らすにはどうすればよいですか?以下
(そこに多くの種類があり、すべてが本当に公開されていない心配しないでください!)私は
public class DataInfo<T>
{
public DataInfo(string description, Func<T, object> funcToGetValue)
{
this.description = description;
this.funcToGetValue= funcToGetValue;
}
public readonly string description;
public readonly Func<T, object> funcToGetValue;
}
public class DataType1
{
public int fieldA { get; set; }
public string fieldB { get; set; }
}
public class CurrentUse
{
static List<DataInfo<DataType1>> data1 = new List<DataInfo<DataType1>>()
{
new DataInfo<DataType1>("someStuff", data => data.fieldA),
new DataInfo<DataType1>("someOtherStuff", data => data.fieldB)
};
}
を持っているいくつかのコードの大きく削減バージョンですそれが行く限り、しかし、私が繰り返さなければならないという事実new DataInfo<DataType1>
は私を少し気にさせる。
私はそう
public class DataInfo
{
public static DataInfo<T> Create<T>(string description, Func<T, object> func)
{
return new DataInfo<T>(description, func);
}
}
public class DesiredUse
{
static List<DataInfo<DataType1>> data1 = new List<DataInfo<DataType1>>()
{
DataInfo.Create("someStuff", data => data.fieldA),
DataInfo.Create("someOtherStuff", data => data.fieldB)
};
}
として私のためのオブジェクトを作成するためにDataInfoの非ジェネリックヘルパーverionを作成しようとしたが、それが型を推論することはできませんと、それはコンパイラがFIELDA & FIELDBを解決できないとそれが動作しません。のデータ。
重複したタイプ情報をどのように取り除くことができますか?
static List<DataInfo<DataType1>> data1 = new DataInfoListBuilder<DataType1>
{
{ "someStuff", data => data.fieldA },
{ "someOtherStuff", data => data.fieldB }
}.Build();
:次にとしてそれを使用
public sealed class DataInfoListBuilder<T> : IEnumerable
{
private readonly List<DataInfo<T>> list = new List<DataInfo<T>>();
public void Add(string description, Func<T, object> function)
{
list.Add(DataInfo.Create<T>(description, function));
}
public List<DataInfo<T>> Build()
{
return list;
}
public IEnumerator GetEnumerator()
{
throw new InvalidOperationException
("IEnumerator only implemented for the benefit of the C# compiler");
}
}
:私がいる限り、私はDataInfos
ありがとうございましたジョンは、それは素晴らしいです! – Argos