Ниже приведена сильно урезанная версия кода, который у меня есть
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>
меня немного беспокоит.
Я пытался создать не универсальную вспомогательную версию DataInfo, чтобы создать объекты для меня, как это
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)
};
}
Но это не работает, так как компилятор не может разрешить fieldA и fieldB, поскольку он не может определить тип данных.
Есть идеи, как мне избавиться от дублированной информации о типах? Я не против внесения изменений, пока я получаю список DataInfos