本文整理汇总了C#中IReadOnlyList.Last方法的典型用法代码示例。如果您正苦于以下问题:C# IReadOnlyList.Last方法的具体用法?C# IReadOnlyList.Last怎么用?C# IReadOnlyList.Last使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IReadOnlyList
的用法示例。
在下文中一共展示了IReadOnlyList.Last方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetInsidePoint
public static Point GetInsidePoint(IReadOnlyList<Point> points, Box boundingBox)
{
var y = (boundingBox.MinY + boundingBox.MaxY) / 2;
var xIntersections = new List<double>();
var point1 = points.Last();
foreach (var point2 in points)
{
if ((y > point1.Y) != (y > point2.Y))
{
xIntersections.Add((y - point2.Y) * (point1.X - point2.X) / (point1.Y - point2.Y) + point2.X);
}
point1 = point2;
}
xIntersections.Sort();
Debugger.BreakWhen(xIntersections.Count == 0 || xIntersections.Count % 2 != 0);
var x = (boundingBox.MinX + boundingBox.MaxX) / 2;
var maxDelta = double.NegativeInfinity;
for (var i = 0; i < xIntersections.Count - 1; i += 2)
{
var delta = Math.Abs(xIntersections[i] - xIntersections[i + 1]);
if (delta > maxDelta)
{
x = (xIntersections[i] + xIntersections[i + 1]) / 2;
maxDelta = delta;
}
}
var point = new Point(x, y);
#if DEBUG
Debugger.BreakWhen(!PointInPolygonTest.Contains(points, point));
#endif
return point;
}
示例2: Line
public Line(
IReadOnlyList<Frame> frames,
IReadOnlyList<Ball> bonusBalls)
{
if (frames == null)
{
throw new ArgumentNullException(nameof(frames));
}
if (bonusBalls == null)
{
throw new ArgumentNullException(nameof(bonusBalls));
}
if (frames.Count != 10)
{
throw new ArgumentException("A line must be composed of 10 frames");
}
if (frames.Last().IsStrike && bonusBalls.Count != 2)
{
throw new ArgumentException("Two bonus balls are required when last frame is strike");
}
if (frames.Last().IsSpare && bonusBalls.Count != 1)
{
throw new ArgumentException("One bonus ball is required when last frame is spare");
}
Frames = frames;
BonusBalls = bonusBalls;
}
示例3: Override
internal bool Override( IActivityMonitor monitor, IReadOnlyList<string> fullPath, ActionConfiguration a )
{
var e = fullPath.GetEnumerator();
if( !e.MoveNext() ) throw new ArgumentException( "Must not be empty.", "fullPath" );
if( e.Current != _action.Name ) throw new ArgumentException( "Must start with the action name.", "fullPath" );
if( !e.MoveNext() )
{
_action = a;
_isCloned = false;
monitor.SendLine( LogLevel.Info, string.Format( "Action '{0}' has been overridden.", a.Name ), null );
return true;
}
ActionCompositeConfiguration parent;
int idx = FindInComposite( e, out parent );
if( idx >= 0 )
{
Debug.Assert( _action is ActionCompositeConfiguration, "It is a composite." );
Debug.Assert( _action.IsCloneable, "A composite is cloneable." );
if( !_isCloned )
{
_action = ((ActionCompositeConfiguration)_action).CloneComposite( true );
monitor.SendLine( LogLevel.Info, string.Format( "Action '{0}' has been cloned in order to override an inner action.", string.Join( "/", fullPath ) ), null );
_isCloned = true;
idx = FindInComposite( e, out parent );
}
Debug.Assert( parent.Children[idx].Name == fullPath.Last() );
parent.Override( idx, a );
monitor.SendLine( LogLevel.Info, string.Format( "Inner action '{0}' has been overridden.", string.Join( "/", fullPath ) ), null );
return true;
}
monitor.SendLine( LogLevel.Error, string.Format( "Action '{0}' not found. Unable to override it.", string.Join( "/", fullPath ) ), null );
return false;
}
示例4: HasVariadic
internal static bool HasVariadic(IReadOnlyList<Scope> f)
{
if (f.Count == 0)
{
return false;
}
return f.Last().Attribute.HasAnyAttribute(AttributeType.Variadic);
}
示例5: EndsWithSimpleNewLine
private static bool EndsWithSimpleNewLine(IReadOnlyList<SyntaxTrivia> list)
{
if (list.Count == 0)
{
return false;
}
if (list.Last().IsKind(SyntaxKind.EndOfLineTrivia))
{
return true;
}
if (list.Count > 1 &&
list[list.Count - 1].IsKind(SyntaxKind.WhitespaceTrivia) &&
list[list.Count - 2].IsKind(SyntaxKind.EndOfLineTrivia))
{
return true;
}
return false;
}
示例6: GetSourceFiles
// The assembly info must be in the last minus 1 position because:
// - assemblyInfo should be in the end to override attributes
// - assemblyInfo cannot be in the last position, because last file contains the main
private static IEnumerable<string> GetSourceFiles(IReadOnlyList<string> sourceFiles, string assemblyInfo)
{
if (!sourceFiles.Any())
{
yield return assemblyInfo;
yield break;
}
foreach (var s in sourceFiles.Take(sourceFiles.Count() - 1))
yield return s;
yield return assemblyInfo;
yield return sourceFiles.Last();
}
示例7: GetArtworkLinkAsync
private async Task<Uri> GetArtworkLinkAsync(IReadOnlyList<string> releaseIds)
{
using (var client = new HttpClient())
{
foreach (string releaseId in releaseIds)
{
string artworkRequestUrl = string.Format(ArtworkEndpoint, releaseId);
HttpResponseMessage response;
try
{
response = await client.GetAsync(artworkRequestUrl);
// The only valid failure status is "Not Found"
if (response.StatusCode == HttpStatusCode.NotFound)
{
continue;
}
response.EnsureSuccessStatusCode();
}
catch (HttpRequestException ex)
{
string errorInfo = string.Format("Could not download artwork informations for release id {0}", releaseId);
// If we can't even get the last artwork, throw
if (releaseId == releaseIds.Last())
{
throw new ArtworkFetchException(errorInfo, ex);
}
if (releaseIds.Count > 1)
{
this.Log().Error(errorInfo + ", retrying with next in list.");
}
continue;
}
string responseContent = await response.Content.ReadAsStringAsync();
JToken artworkUrlToken = JObject.Parse(responseContent).SelectToken("images[0].image");
if (artworkUrlToken == null)
{
continue;
}
return new Uri(artworkUrlToken.ToObject<string>());
}
}
return null;
}
示例8: StalkUpTo
public MergeResult StalkUpTo(IReadOnlyList<Commit> commits)
{
var mergeFiles = new List<String> ();
var startingCommit = head.Tip;
var newCommits = new List<Commit> ();
MergeResult mergeResult = null;
var mergeOptions = new MergeOptions ();
var signature = new Signature (userName, userEmail, DateTime.Now);
//var checkoutOptions = new CheckoutOptions ();
// var commitMsg = new List<String> ();
commitMsg = (String.Format ("Automated Stalker (StalkUpTo) merge commit from: '{0}' to: '{1}' into {2}", commits.First ().Sha.Substring (0, 6), commits.Last ().Sha.Substring (0, 6), head.Tip.Sha.Substring (0, 6)));
// Console.WriteLine ("Working on {0} commits", commits.Count);
var commit = commits.Last ();
Array.ForEach (CommitLog (commit, true).ToArray(), Console.WriteLine);
mergeOptions.FastForwardStrategy = FastForwardStrategy.FastForwardOnly;
mergeOptions.CommitOnSuccess = true;
//checkoutOptions.CheckoutModifiers = CheckoutModifiers.None;
try {
Console.WriteLine ("Merge FF: {0} : {1}", commit.Sha.Substring (0,6), commit.MessageShort);
mergeResult = repo.Merge (commit, signature, mergeOptions);
var tmpMsg = mergeResult.Commit.Message;
var commitOptions = new CommitOptions ();
commitOptions.AmendPreviousCommit = true;
repo.Commit (commitMsg + "\n\n" + tmpMsg, signature, commitOptions);
} catch {
Console.WriteLine ("Merge FF Failed: CheckoutFileConflictStrategy.Theirs");
//commitMsg = CommitLog (commit, true, commitMsg);
// this will happen as libgit2sharp throws ex if fast forward not possible
// so lets get a commit message ready
mergeFiles.AddRange (FilesToMerge (commit));
mergeOptions.FastForwardStrategy = FastForwardStrategy.NoFastForward;
mergeOptions.FileConflictStrategy = CheckoutFileConflictStrategy.Theirs;
mergeOptions.CommitOnSuccess = true;
try {
var fgColor = Console.ForegroundColor;
var bgColor = Console.BackgroundColor;
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine ("Merging commit : {0}", commit.Sha);
Console.WriteLine (" - Info : {0} / {1} / {2}", commit.Author.When, commit.Author.Name, commit.Author.Email);
Console.WriteLine (" - Msg : {0}", commit.Message);
Console.ForegroundColor = fgColor;
Console.BackgroundColor = bgColor;
mergeResult = repo.Merge (commit, signature, mergeOptions);
var tmpMsg = mergeResult.Commit.Message;
var commitOptions = new CommitOptions ();
commitOptions.AmendPreviousCommit = true;
repo.Commit (commitMsg + "\n\n" + tmpMsg, signature, commitOptions);
//Array.ForEach (MergeResultLog (mergeResult).ToArray (), Console.WriteLine);
} catch (Exception e) {
Console.WriteLine (e.Message);
}
}
return mergeResult;
}
示例9: GetAllSubsets
/// <summary>
/// Returns an enumeration that contains all subsets of the parameter.
/// </summary>
private static IEnumerable<List<int>> GetAllSubsets(IReadOnlyList<int> of)
{
var subsets = new List<List<int>>((int)Math.Pow(2, of.Count));
for (var i = 1; i < of.Count; i++)
{
subsets.Add(new List<int>(new[] { of[i - 1] }));
var i1 = i;
var newSubsets = subsets.Select(subset => subset.Concat(new[] { of[i1] }).ToList()).ToList();
subsets.AddRange(newSubsets);
}
subsets.Add(new List<int>(new[] { of.Last() }));
return subsets;
}
示例10: FindEnemies
private bool FindEnemies()
{
IEntity enemy = null;
globalSearcher.StartSearch(Location.Tile, Location.Tile, Math.Max(DetectRange, SightRange), (tile, layer, bundle) =>
{
enemy = tile.LayoutManager.Entities.FirstOrDefault(e => RelationManager.IsEnemy(e.RelationManager.RelationToken));
if (enemy != null)
globalSearcher.StopSearch();
});
if (enemy != null)
{
hountingPath = globalSearcher.GetShortestRoute(enemy.Location.Tile);
$"{this} found enemies at {hountingPath.Last().GridPosition}".Dump();
return true;
}
else
{
hountingPath = null;
return false;
}
}
示例11: CreateEngineOils
/// <summary>
/// 创建发动机滑油监控记录。
/// </summary>
/// <remarks>
/// 对每一台发动机,自滑油监控最后一条记录至当天,每天计算一条监控记录。
/// 初始的时候,从最近一次装上开始计算。
/// </remarks>
/// <param name="lastTSR">最近一次装上记录</param>
/// <param name="engineReg">发动机</param>
/// <param name="flights">最近一次装上以来的飞行日志集合</param>
private List<OilMonitor> CreateEngineOils(SnHistory lastTSR, EngineReg engineReg,
IReadOnlyList<FlightLog> flights)
{
if (lastTSR == null) throw new ArgumentNullException("lastTSR");
var oilMonitors = new List<OilMonitor>();
// 开始计算日期
var startDate = GetStartDate(lastTSR, flights);
if (!flights.Any()) return oilMonitors;
// 计算截止日期,飞行日志最后一天的次日,最后一天为当天的则为当天。
var endDate = flights.Last().FlightDate.Date == DateTime.Today
? DateTime.Today
: flights.Last().FlightDate.Date.AddDays(1);
while (endDate.Subtract(startDate).TotalDays > 0)
{
decimal qsr, interval, deltaInterval, lastInterval;
var tsr = flights.TakeWhile(f => f.FlightDate < startDate.AddDays(1)).Sum(f => f.FlightHours);
switch (lastTSR.Position)
{
case Position.发动机1:
qsr =
flights.TakeWhile(f => f.FlightDate < startDate.AddDays(1))
.Sum(f => f.ENG1OilDep + f.ENG1OilArr);
lastInterval =
_unitOfWork.CreateSet<OilMonitor>()
.Where(o => o.IntervalRate > 0)
.Select(o => o.IntervalRate)
.FirstOrDefault();
CalIntervalOil(
flights.Select(
f => Tuple.Create(f.FlightDate, f.TakeOff, f.ENG1OilDep, f.ENG1OilArr, f.FlightHours))
.ToList(), startDate, out interval);
deltaInterval = lastInterval > 0 ? interval - lastInterval : 0;
oilMonitors.Add(CreateEngineOil(lastTSR, engineReg, startDate, tsr, qsr, interval, deltaInterval));
break;
case Position.发动机2:
qsr =
flights.TakeWhile(f => f.FlightDate < startDate.AddDays(1))
.Sum(f => f.ENG2OilDep + f.ENG2OilArr);
lastInterval =
_unitOfWork.CreateSet<OilMonitor>()
.Where(o => o.IntervalRate > 0)
.Select(o => o.IntervalRate)
.FirstOrDefault();
CalIntervalOil(
flights.Select(
f => Tuple.Create(f.FlightDate, f.TakeOff, f.ENG2OilDep, f.ENG2OilArr, f.FlightHours))
.ToList(), startDate, out interval);
deltaInterval = lastInterval > 0 ? interval - lastInterval : 0;
oilMonitors.Add(CreateEngineOil(lastTSR, engineReg, startDate, tsr, qsr, interval, deltaInterval));
break;
case Position.发动机3:
qsr =
flights.TakeWhile(f => f.FlightDate < startDate.AddDays(1))
.Sum(f => f.ENG3OilDep + f.ENG3OilArr);
lastInterval =
_unitOfWork.CreateSet<OilMonitor>()
.Where(o => o.IntervalRate > 0)
.Select(o => o.IntervalRate)
.FirstOrDefault();
CalIntervalOil(
flights.Select(
f => Tuple.Create(f.FlightDate, f.TakeOff, f.ENG3OilDep, f.ENG3OilArr, f.FlightHours))
.ToList(), startDate, out interval);
deltaInterval = lastInterval > 0 ? interval - lastInterval : 0;
oilMonitors.Add(CreateEngineOil(lastTSR, engineReg, startDate, tsr, qsr, interval, deltaInterval));
break;
case Position.发动机4:
qsr =
flights.TakeWhile(f => f.FlightDate < startDate.AddDays(1))
.Sum(f => f.ENG4OilDep + f.ENG4OilArr);
lastInterval =
_unitOfWork.CreateSet<OilMonitor>()
.Where(o => o.IntervalRate > 0)
.Select(o => o.IntervalRate)
.FirstOrDefault();
CalIntervalOil(
flights.Select(
f => Tuple.Create(f.FlightDate, f.TakeOff, f.ENG4OilDep, f.ENG4OilArr, f.FlightHours))
.ToList(), startDate, out interval);
deltaInterval = lastInterval > 0 ? interval - lastInterval : 0;
oilMonitors.Add(CreateEngineOil(lastTSR, engineReg, startDate, tsr, qsr, interval, deltaInterval));
break;
default:
throw new ArgumentOutOfRangeException();
}
startDate = startDate.AddDays(1);
}
return oilMonitors;
}
示例12: CreateAPUOils
/// <summary>
/// 创建APU滑油监控记录。
/// </summary>
/// <remarks>
/// 对每一台APU,自滑油监控最后一条记录至当天,每天计算一条监控记录。
/// 初始的时候,从最近一次装上开始计算。
/// </remarks>
/// <param name="lastTSR">最近一次装上记录</param>
/// <param name="apuReg">APU</param>
/// <param name="flights">最近一次装上以来的飞行日志集合</param>
/// <returns>滑油监控记录集合。</returns>
private List<OilMonitor> CreateAPUOils(SnHistory lastTSR, APUReg apuReg, IReadOnlyList<FlightLog> flights)
{
var oilMonitors = new List<OilMonitor>();
// 开始计算日期
var startDate = GetStartDate(lastTSR, flights);
if (!flights.Any()) return oilMonitors;
// 计算截止日期,飞行日志最后一天的次日,最后一天为当天的则为当天。
var endDate = flights.Last().FlightDate.Date == DateTime.Today
? DateTime.Today
: flights.Last().FlightDate.Date.AddDays(1);
while (endDate.Subtract(startDate).TotalDays > 0)
{
decimal interval;
var tsr = flights.TakeWhile(f => f.FlightDate < startDate.AddDays(1)).Sum(f => f.FlightHours);
var qsr = flights.TakeWhile(f => f.FlightDate < startDate.AddDays(1))
.Sum(f => f.ApuOilDep + f.ApuOilArr);
var lastInterval =
_unitOfWork.CreateSet<OilMonitor>()
.Where(o => o.IntervalRate > 0)
.Select(o => o.IntervalRate)
.FirstOrDefault();
CalIntervalOil(
flights.Select(f => Tuple.Create(f.FlightDate, f.TakeOff, f.ApuOilDep, f.ApuOilArr, f.FlightHours))
.ToList(), startDate, out interval);
var deltaInterval = lastInterval > 0 ? interval - lastInterval : 0;
oilMonitors.Add(CreateAPUOil(lastTSR, apuReg, startDate, tsr, qsr, interval, deltaInterval));
startDate = startDate.AddDays(1);
}
return oilMonitors;
}