我有这个 C# WinForms 代码,其中我有几个不同structs
的,所有功能都以相同的方式。因此,我没有编写单独的函数来添加或删除项目,而是尝试使用模板。
例如,这是一个struct
和List<>
我用来存储它的对应的objects
:
public struct Alias
{
public string alias;
public string aliasSource;
public static bool IsValid(...); //This function exists in all the structs
};
List<Alias> aliases;
这是从外部使用的函数,用于添加别名:
public void AddAlias(Alias iAlias)
{
AddGenericStructItem<Alias>(iAlias, aliases);
}
这是进行加法的实际功能:
private void AddGenericStructItem<T>(T genericStructItem, List<T> genericList)
{
string outputError;
if (T.IsValid(genericStructItem, out outputError)) //< -- Problem in the 'T' being used in the far left
{
if (genericList.Contains(genericStructItem))
{
MessageBox.Show("ERROR 82ha5jb :: Item already exists");
}
else
{
genericList.Add(genericStructItem);
}
}
else
{
MessageBox.Show(outputError);
}
}
问题出现在T.IsValid...
零件中。编译器给我以下错误T
:
'T' is a 'type parameter', which is not valid in the given context
有没有办法解决?我所有的structs
人都有一个IsValid
具有相同设置的功能,所以重复编写相同的代码似乎很愚蠢,以防我在这里不使用模板......