【发布时间】:2016-09-05 12:27:37
【问题描述】:
我正在锁定一种将我的函数 GetItem 用作其他一些类的泛型方法的方法。这些类都是基于 CBase 的,我使用 GetItem 方法分成了近 20 个类。 20 个类的唯一区别是类类型。在这个例子中是类类型 CLoad。
我会使用函数 GetItem 作为通用方法,但我没有看到这样做的方法。目前我将此功能复制到每个班级。
希望有更好的办法。
using System.Collections.ObjectModel;
using System.Data;
using System.Linq;
namespace WindowsFormsGenerics
{
public class CLoadListe : Collection<CLoad>
{
///<param name="Searchstring"> String nach dem die Lastenliste durchsucht werden soll </param>
///<param name="Parameter"> NAME für Lastenname, ALIASNAME oder DESCRIPTION</param>
public CLoad GetItem(string Searchstring, string Parameter = "NAME")
{
if (this.Count == 0) return null;
if (Searchstring.Length == 0) return null;
switch (Parameter) // Parameter auswerten
{
case ("NAME"): return this.Where(item => item.Name == Searchstring).FirstOrDefault();
case ("DESCRIPTION"): return this.Where(item => item.Description == Searchstring).FirstOrDefault();
default: throw new System.Exception($"Suchparameter {Parameter} nicht vorhanden");
}
}
}
/// <summary>Basisklasse für alle Elemente </summary>
public class CBase
{
/// <summary> Elementname </summary>
public string Name { get; set; }
/// <summary> Beschreibung </summary>
public string Description { get; set; }
}
public class CKnoten : CBase { }
public class COneNodeElement : CBase
{
/// <summary> KnotenOne des Elementes </summary>
public CKnoten KnotenOne { get; set; }
/// <summary> Schaltzustand am KnotenOne </summary>
public bool SwitchOne { get; set; }
}
public class CLoad : COneNodeElement { }
}
谢谢 史蒂芬
【问题讨论】:
-
看接口
标签: c# generics collections