我想用 DRY 原則練習代碼,但是我的方法使用了 2 個不同的類,classOneDTO 和 classTwoDTO.. 它們具有不同的屬性,我想將它與 PRIMARYIDENTIFIER 屬性鏈接,兩者都具有相同的..
如何創建一個通用方法來獲取我想用 Linq 查詢的屬性。
更新:我的目的是有一個通用方法來查詢 PrimaryIdentifier 并獲取資料,無論他們使用的是 classOneDTO 還是 classTwoDTO。有沒有辦法有一個通用的方法來做到這一點?
private void genericMethod<T>(List<T> workList, GridView grid, int columnNo)
{
if (workList.Any())
{
string CodeString = default;
// Want to dynamic get the properties in different class with PrimaryIDentifier property
// want to check if PrimaryIdentifier is NULL OR EMPTY
var getDataOne = workList.Cast<classOneDTO>().FirstOrDefault(x => !string.IsNullOrEmpty(x.PrimaryIdentifier));
// causing error because of the CAST if wrong type request
var getDataTwo = workList.Cast<classTwoDTO>().FirstOrDefault(x => !string.IsNullOrEmpty(x.PrimaryIdentifier));
if (getDataOne != null || getDataTwo != null)
{
CodeString = (getDataOne != null) ? getDataOne.PrimaryIdentifier : getDataTwo.PrimaryIdentifier;
}
}
}
public class classOneDTO
{
public int PatientID { get; set; }
public string PrimaryIdentifier { get; set; }
public string FirstName{ get; set; }
// so oonnn...
}
public class classTwoDTO
{
public int EntryID { get; set; }
public string PrimaryIdentifier { get; set; }
public string Location{ get; set; }
// so oonnn...
}
uj5u.com熱心網友回復:
您所需要的只是使您的兩個類都實作相同的介面,即IDTO:
public interface IDTO
{
string PrimaryIdentifier { get; set; }
}
然后你可以告訴編譯器只接受實作你的新介面的型別:
private void GenericMethod<DTO>(List<DTO> workList, GridView grid, int columnNo)
where DTO: IDTO
{
if (workList.Any())
{
string CodeString = default;
var getData = workList.FirstOrDefault(x => !string.IsNullOrEmpty(x.PrimaryIdentifier));
if (getData != null)
{
CodeString = getData?.PrimaryIdentifier;
}
}
}
(注意第 2 行) 此外,我還根據標準.Net 命名約定對您的類和方法命名進行了細微調整。
這是完整的代碼:
public class Client
{
private void GenericMethod<DTO>(List<DTO> workList, GridView grid, int columnNo)
where DTO: IDTO
{
if (workList.Any())
{
string CodeString = default;
var getData = workList.FirstOrDefault(x => !string.IsNullOrEmpty(x.PrimaryIdentifier));
if (getData != null)
{
CodeString = getData?.PrimaryIdentifier;
}
}
}
}
public class ClassOneDTO : IDTO
{
public int PatientID { get; set; }
public string PrimaryIdentifier { get; set; }
public string FirstName { get; set; }
// so oonnn...
}
public class ClassTwoDTO : IDTO
{
public int EntryID { get; set; }
public string PrimaryIdentifier { get; set; }
public string Location { get; set; }
// so oonnn...
}
public interface IDTO
{
string PrimaryIdentifier { get; set; }
}
編輯:正如Johnathan Barclay正確指出的那樣,如果您不需要一些在示例中未顯示的更高級的邏輯,則實際上不需要通用方法。
private void GenericMethod(IEnumerable<IDTO> workList, GridView grid, int columnNo)
{
if (workList.Any())
{
string CodeString = default;
var getData = workList.FirstOrDefault(x => !string.IsNullOrEmpty(x.PrimaryIdentifier));
if (getData != null)
{
CodeString = getData?.PrimaryIdentifier;
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/490705.html
上一篇:為什么InvocationExpression的引數是Expression而不是ParameterExpression?
