假设我有一个名为MyExtensionMethod的扩展方法。
我想这样用:
var x = new MyClass()
x.MyExtensionMethod()
然后,在扩展方法中,我想获取它被调用的引用的名称:
public static void MyExtensionMethod(this object param)
{
//get the name "x" somehow
}
这可能吗?
答案 0 :(得分:4)
在C#中,这是不可能的。确定可用的信息如下:
来源:Caller Information (C# and Visual Basic)
如果您只是想简化参数检查,请在以下文件夹中创建一个文件:
%USERPROFILE%\ Documents \ Visual Studio 2012 \ Code Snippets \ Visual C#\ My Code Snippets
如果您有多个版本的Visual Studio,或者版本不同于2012,则其他版本将存在适当命名的替代文件夹。
将文件命名为 ThrowIfArgumentNull.snippet ,其中包含以下内容。要使用它,请在编辑器中键入tan
,然后按Tab键两次。您将获得IntelliSense支持以输入参数名称,字符串参数将自动填充。此代码段会创建标准ArgumentNullException
,但您可以修改它以使用Guard
或Argument
类,如果这是您的项目所使用的。
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
<Title>Throw if argument null</Title>
<Author>Sam Harwell</Author>
<Description>Throw an ArgumentNullException if the specified argument is null.</Description>
<HelpUrl>
</HelpUrl>
<Shortcut>tan</Shortcut>
</Header>
<Snippet>
<Declarations>
<Literal Editable="true">
<ID>arg</ID>
<ToolTip>arg</ToolTip>
<Default>arg</Default>
<Function>
</Function>
</Literal>
<Literal Editable="false">
<ID>ArgumentNullException</ID>
<ToolTip>ArgumentNullException</ToolTip>
<Default>ArgumentNullException</Default>
<Function>SimpleTypeName(global::System.ArgumentNullException)</Function>
</Literal>
</Declarations>
<Code Language="csharp"><![CDATA[if ($arg$ == null)
throw new $ArgumentNullException$("$arg$");$end$]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>