相关疑难解决方法(0)

c#方法参数的自定义属性 - 它是如何工作的?

我想了解这个特例如何运作.这是从msdn文章中解释INotifyPropertyChanged接口的解释(https://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=EN-US&k=k%28System.ComponentModel.INotifyPropertyChanged%29;k%28TargetFrameworkMoniker -.NETFramework,版本%3Dv4.5%29; k%28DevLang-csharp%29&rd = true) 在此输入图像描述

正如在标记行中所说的那样,有一种方法可以拦截方法调用以替换值而不是实际的值作为参数?我想知道这样做的代码是什么样的.我知道如何使用为属性和其他类成员设置的属性,但这个用例对我来说并不清楚.

谢谢.

.net c# custom-attributes

7
推荐指数
1
解决办法
1532
查看次数

使用 Roslyn 时如何验证方法中参数的类型

我正在使用 Roslyn 进行代码分析,以验证即使我有以下签名

public void MyMethod(object anObject, MyCustomObject customObject);
Run Code Online (Sandbox Code Playgroud)

我只想接收来自 MyCustomObject 的字符串(第一个)和子元素(第二个)作为参数。我对签名没有权力,无法更改。

这是我评估我的方法所做的事情(这是一个片段)

    public void OnMethodInvocation(SyntaxNodeAnalysisContext context)
    {
        var invocation= context.Node as InvocationExpressionSyntax;
        var symbol = context.SemanticModel.GetSymbolInfo(invocation).Symbol as IMethodSymbol;

        if (symbol?.Name.ToString()== "MyMethod")
        {
            var parameterList = invocation.Parameters;
        }
Run Code Online (Sandbox Code Playgroud)

截至目前,我可以通过属性参数 (symbol.Parameters) 操作 IParameterSymbol 对象。我没有得到的是以下内容:我已经检查了包含两个参数的结果 IEnumerable,但由于方法签名,它期望接收一个对象和一个 MyCustomObject 实例。我(目前)无法确定第一个参数确实是一个对象而不是字符串(只是一个例子,可能是其他任何东西),并且当我期待 MyCustomObject 的子级时,如果我给它一个空值,我想知道它是一个空参数。

我将感激任何能让我摆脱困境的人!

更新

以下是当我进入 ArgumentSyntax 对象时向我提供的信息类型:

ArgumentSyntax Argument exception
    ContainsAnnotations: false
    ContainsDiagnostics: false
    ContainsDirectives: false
    ContainsSkippedText: false
    Expression: IdentifierNameSyntax IdentifierName exception
    FullSpan: {[550..559)}
    HasLeadingTrivia: false
    HasStructuredTrivia: false
    HasTrailingTrivia: false
    IsMissing: false
    IsStructuredTrivia: false …
Run Code Online (Sandbox Code Playgroud)

c# code-analysis roslyn

4
推荐指数
1
解决办法
2560
查看次数

标签 统计

c# ×2

.net ×1

code-analysis ×1

custom-attributes ×1

roslyn ×1