我正在尝试做以下事情,但我认为我必须遗漏一些东西......(对于仿制药而言相当新)
(需要针对.NET 2.0 BTW)
interface IHasKey
{
string LookupKey { get; set; }
}
...
public static Dictionary<string, T> ConvertToDictionary(IList<T> myList) where T : IHasKey
{
Dictionary<string, T> dict = new Dictionary<string, T>();
foreach(T item in myList)
{
dict.Add(item.LookupKey, item);
}
return dict;
}
不幸的是,这给出了“非泛型声明不允许约束”错误。有什么想法吗?
答案 0 :(得分:6)
您尚未声明通用参数 将您的声明更改为:
public static Dictionary<string, T> ConvertToDictionary<T> (IList<T> myList) where T : IHasKey{
}
答案 1 :(得分:1)
尝试这样的事情
public class MyObject : IHasKey
{
public string LookupKey { get; set; }
}
public interface IHasKey
{
string LookupKey { get; set; }
}
public static Dictionary<string, T> ConvertToDictionary<T>(IList<T> myList) where T: IHasKey
{
Dictionary<string, T> dict = new Dictionary<string, T>();
foreach(T item in myList)
{
dict.Add(item.LookupKey, item);
}
return dict;
}
List<MyObject> list = new List<MyObject>();
MyObject o = new MyObject();
o.LookupKey = "TADA";
list.Add(o);
Dictionary<string, MyObject> dict = ConvertToDictionary(list);
您忘记了方法
中的通用参数public static Dictionary<string, T> ConvertToDictionary<T>(IList<T> myList) where T: IHasKey
答案 2 :(得分:0)
由于输入列表中的类不同(正如您在评论中所说),您可以像@orsogufo建议的那样实现它,或者您也可以在接口本身上实现您的签名:
public static Dictionary<string, IHasKey> ConvertToDictionary(IList<IHasKey> myList)
{
var dict = new Dictionary<string, IHasKey>();
foreach (IHasKey item in myList)
{
dict.Add(item.LookUpKey, item);
}
return dict;
}
如果您有一个接口的一个特定实现的列表,则使用泛型声明是最好的,如对另一个答案的注释中所述。