gpt4 book ai didi

c# - 为什么这行得通?

转载 作者:太空狗 更新时间:2023-10-30 00:27:54 25 4
gpt4 key购买 nike

我在谷歌上搜索试图找到一种方法来调用 Control.DataBindings.Add 而不使用字符串文字但从属性本身获取属性名称,我认为这不太容易出错,位于至少对于我的特殊情况,因为我通常让 Visual Studio 在重命名属性时进行重命名。所以我的代码看起来像 DataBindings.Add(GetName(myInstance.myObject)... 而不是 DataBindings.Add("myObject"...。所以我发现这个:

    static string GetName<T>(T item) where T : class
{
var properties = typeof(T).GetProperties();
if (properties.Length != 1) throw new Exception("Length must be 1");
return properties[0].Name;
}

这将被调用,假设我有一个名为 One 的属性,这样:string name = GetName(new { this.One }); 这将给我“一”。我不知道它为什么有效以及使用它是否安全。我什至不知道 new { this.One } 是什么意思。而且我不知道在哪种情况下 properties.Length 不是 1。

顺便说一下,我刚刚测试了将我的属性 One 重命名为 Two 并且 Visual Studio 将 new { this.One } 转换为 new { One = this.Two },当与 GetName 函数一起使用时,我得到了 “One”,这使得整个事情变得毫无用处,因为在重命名属性后,我将传递给 Control.DataBindings.Add 的名称仍然是“一个”。

最佳答案

new { this.One } 创建一个 anonymous type 的实例有一个属性,也就是说,因为你没有指定一个名字,叫做“一个”。这就是它起作用的原因。

如果您使用 new { One = this.Two },您将属性命名为“One”。如果您省略“One =”部分,它将再次起作用。

但是,如果不知道如何使用该方法并且不使用匿名类型调用它,则可能会误解您正在使用的方法。

如果您不想使用字符串文字,还有另一种方法,这是您可以在网上找到的示例之一:
http://www.codeproject.com/Tips/57234/Getting-Property-Name-using-LINQ.aspx

关于c# - 为什么这行得通?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4689338/

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