2 回答

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超7個(gè)贊
該變量dataTypeModel未在代碼的任何位置聲明。
如果您想以通用方式返回,您應(yīng)該執(zhí)行以下操作:
public DataTypeModel<T> GetDataType<T>(string str) where T : class
{
List<DataTypeDomain> dataTypeDomain = new List<DataTypeDomain>();
_dataProvider.ExecuteCmd(
"config_select_by_key",
inputParamMapper: delegate (SqlParameterCollection paramCol)
{
paramCol.AddWithValue("@ConfigKey", str);
},
singleRecordMapper: delegate (IDataReader reader, short set)
{
int i = 0;
DataTypeModel<int> dataTypeModel = new DataTypeModel<int>();
string key = string.Format("Key{0}", i);
DataTypeDomain dtd = dataTypeDomain.Find(x => x.ConfigKey == key);
dataTypeModel.ConfigKey = dtd.ConfigKey;
dataTypeModel.ConfigValue = int.Parse(dtd.ConfigValue);
}
);
return new DataTypeModel<T>()
{
ConfigKey = "What your key is",
ConfigValue = dataTypeDomain.First() as T //Supposing that the list only contains one config element , if not, you should change your method return type to a List<DataTypeModel<T>> and return a List doing this for each element.
};
}
然后在您的界面中:
public interface IDataTypeService
{
DataTypeModel<T> GetDataType<T>(string str) where T : class;
}
快速說(shuō)明
當(dāng)您使用泛型時(shí),您應(yīng)該在以下方法上指定 T :
DataTypeModel<T> GetDataType<T>(string str) --> Only use T inside method scope
另一種聲明方式T是在類/接口級(jí)別,例如:
public interface IDataTypeService<T> --> With this you can use `T` in all of the class/interface
此外,如果你想指定一些T應(yīng)該遵循的約束,你可以這樣做:
where T : class; --> In our case this allow us to cast the object to T
該代碼未經(jīng)測(cè)試,但我想它應(yīng)該可以工作。

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
您不能T
在接口定義中保持打開狀態(tài)。你必須關(guān)閉類型
DataTypeModel<SomeType> GetDataType(string str);
- 2 回答
- 0 關(guān)注
- 350 瀏覽
添加回答
舉報(bào)