gpt4 book ai didi

c# - setter 可以获取它所在的属性的名称吗

转载 作者:太空宇宙 更新时间:2023-11-03 17:51:24 25 4
gpt4 key购买 nike

我只是想知道是否有可能做这样的事情:

private int _x;
public int X
{
get{ return _x;}
set{_x = value; OnPropertyChanged(*theNameOfTheProperty*);}
}

没有实际指定 OnPropertyChanged("X");
我猜想制作 OnPropertyChanged更通用的也许使用反射......

最佳答案

有两种方法可以按照您的要求进行操作。第一种(仅限 .NET 4.5+!)方法是将 OnPropertyChanged 修改为:

private void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
....
}

然后你从二传手调用它:
set
{
_var = value;
OnPropertyChanged();
}

这将使用调用属性自动填充“propertyName”参数,除非您明确提供参数。请注意,您需要一个 using System.Runtime.CompilerServices;获取 CallerMemberName 的命名空间属性。

另一种方法是编写 propfull 的自定义版本。片段在创建时为您填充它。我的这个片段的版本是:
<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>propnp</Title>
<Shortcut>propnp</Shortcut>
<Description>Code snippet for property with OnPropertyChanged</Description>
<Author>Bradley</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>type</ID>
<ToolTip>Property type</ToolTip>
<Default>int</Default>
</Literal>
<Literal>
<ID>property</ID>
<ToolTip>Property name</ToolTip>
<Default>MyProperty</Default>
</Literal>
<Literal>
<ID>field</ID>
<ToolTip>The variable backing this property</ToolTip>
<Default>myVar</Default>
</Literal>
</Declarations>
<Code Language="csharp"><![CDATA[public $type$ $property$
{
get { return $field$;}
set
{
$field$ = value;
OnPropertyChanged($property$);
}
}
$end$]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>

关于c# - setter 可以获取它所在的属性的名称吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24439683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com