【发布时间】:2009-06-03 13:10:00
【问题描述】:
以下是我拥有的一些代码的大幅缩减版本
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 列表
【问题讨论】:
标签: c# generics lambda type-inference