private Resource GetHighestPurchaseableUtilityPerCost(Self simSelf, Other simOther, Resource[] bannedResources) { var resourceObject = tradeableResources .Where(resource => !bannedResources.Contains(resource)) .Where(resource => exchange.CanPurchase(resource, simSelf, simOther)) .Select(resource => new { resource, utility = utilityFunctions.GetIncrementalUtility(resource, simSelf, increment), purchase = exchange.Purchase(resource, increment, simSelf, simOther).info }) // The purchase could have been restricted in size based on available funds .Where(resource => resource.purchase.amount == increment) .Where(resource => resource.purchase.cost <= simSelf.GetCurrentFunds()) .OrderBy(resource => resource.utility / resource.purchase.cost) .LastOrDefault(); if (resourceObject == default) { return(default(Resource)); } return(resourceObject.resource); }