この C# WinForms コードには、いくつかの異なるstructs
があり、すべて同じように機能します。そのため、アイテムを追加または削除するための個々の関数を記述する代わりに、代わりにテンプレートを使用しようとしています。
たとえば、これは1つと、その保存に使用して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
ので、ここでテンプレートを使用しない場合、同じコードを繰り返し書くのはばかげているように思えます...