c#在基类中按字段搜索集合

时间:2017-02-14 13:15:53

标签: c# inheritance observablecollection

给定是一个基类和一些派生类:

class baseVehicle
{
    public int Id { get; set; }
    public string vName { get; set; }
    public int maxSpeed { get; set; }
}
class truck : baseVehicle
{
    public int loadTons { get; set; }
}
class cabrio : baseVehicle
{
    public bool softTop { get; set; }
}
class suv : baseVehicle
{
    public int NoOfSeats { get; set; }
}

创建所有这些车辆对象并将其插入集合中:

public ObservableCollection<object> vehicles = new ObservableCollection<object>vehicles();

使用vName =“Alfa Romeo Giulietta”或Id = 43找到车辆的最有效方法是什么?

3 个答案:

答案 0 :(得分:1)

您应该创建baseVehicle的集合(baseVehicle是其他人的基类,您可以添加类型为baseVehicle的每个对象或从baseVehicle派生的类型),不是object的集合(您可以使用object的集合,但是您应该将元素转换为正确的类型):

public ObservableCollection<baseVehicle> vehicles = new ObservableCollection<baseVehicle>vehicles();

获取一个元素:

您可以使用FirstOrDefault() - 您可以使用First()但是您应该确保该元素存在于集合中(在lambda中具有条件):

var vehicle = vehicles.FirstOrDefault(i => i.Id == 43);
if (vehicle != null)
{
    //some code
}

您可以使用OR组合条件:

var vehicle = vehicles.FirstOrDefault(i => i.Id == 43 || i.vName == "some name");

此外,您可以使用AND

var vehicle = vehicles.FirstOrDefault(i => i.Id == 43 && i.vName == "some name");

获取几个元素:

使用Where();

var someVehicles = vehicles.Where(i => i.Contains("Alfa"));
//or
var someVehicles = vehicles.Where(i => i.Id == 2 || i.vName == "Some name);

答案 1 :(得分:1)

根据评论中的建议,使用ObservableCollection<baseVehicle>并对其进行过滤:

collection.where(x=>x.Id == 43 || x.vName == "Alfa Romeo Giulietta").FirstOrDefault();

答案 2 :(得分:1)

将您的收藏更改为 var _ID = SpreadsheetApp.getActiveSpreadsheet().getId(); var _sheet = SpreadsheetApp.getActiveSpreadsheet(); var _file = DriveApp.getFolderById(_ID); var _folder = _file.getParents().next(); var _parentFolder = _file.getParents().next(); var _existingJsons = _parentFolder.getFilesByName(sheet.getName()+".json"); // if .json with the same name already exists in this directory, just overwrite content if (_existingJsons.hasNext()){ while (_existingJsons.hasNext() ){ var _json = _existingJsons.next(); _json.setContent(output); Logger.log(_json.getName()); } } // if not, create new one, and move it in the same folder sheet is in else { var _json = DriveApp.createFile(sheet.getName()+".json", output, MimeType.PLAIN_TEXT); _json.makeCopy(_parentFolder); _json.setTrashed(true); } 或者您可以将其转换为:

ObservableCollection<baseVehicle>