/
githubmirror
/
PowerShell
Обзор
Документация
Войти
/
githubmirror
/
PowerShell
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/System.Management.Automation/engine/ComInterop/ComMetaObject.cs
66 строк
2 KB
xtqqczze
Use `CallerArgumentExpression` on `Requires.NotNull` (#19200)
23 фев 2023, 21:21
Не верифицирован
23 фев 2023, 21:21
6055a82
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Dynamic; using System.Linq.Expressions; namespace System.Management.Automation.ComInterop { // Note: we only need to support the operations used by ComBinder internal class ComMetaObject : DynamicMetaObject { internal ComMetaObject(Expression expression, BindingRestrictions restrictions, object arg) : base(expression, restrictions, arg) { } public override DynamicMetaObject BindInvokeMember(InvokeMemberBinder binder, DynamicMetaObject[] args) { Requires.NotNull(binder); return binder.Defer(args.AddFirst(WrapSelf())); } public override DynamicMetaObject BindInvoke(InvokeBinder binder, DynamicMetaObject[] args) { Requires.NotNull(binder); return binder.Defer(args.AddFirst(WrapSelf())); } public override DynamicMetaObject BindGetMember(GetMemberBinder binder) { Requires.NotNull(binder); return binder.Defer(WrapSelf()); } public override DynamicMetaObject BindSetMember(SetMemberBinder binder, DynamicMetaObject value) { Requires.NotNull(binder); return binder.Defer(WrapSelf(), value); } public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes) { Requires.NotNull(binder); return binder.Defer(WrapSelf(), indexes); } public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value) { Requires.NotNull(binder); return binder.Defer(WrapSelf(), indexes.AddLast(value)); } private DynamicMetaObject WrapSelf() { return new DynamicMetaObject( ComObject.RcwToComObject(Expression), BindingRestrictions.GetExpressionRestriction( Expression.Call( typeof(ComBinder).GetMethod(nameof(ComBinder.IsComObject), System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public), Helpers.Convert(Expression, typeof(object)) ) ) ); } } }