正在获取,正在使用类名设置值

本文关键字:设置 获取 | 更新日期: 2023-09-27 18:26:22

我希望这个问题不会得到大量的反对票,但我想知道是否有一种方法可以在不调用属性的情况下使用实际类名来获取和设置值。例如,如果我有:

class Perfume
{
  private string _aroma;
  public string Aroma
  {
   set
   {
    _aroma = value;
   }
  }
}

有没有办法做到:

Perfume perfume = new Perfume();
perfume = "Aroma"; // which will set _aroma to "Aroma";

正在获取,正在使用类名设置值

一种方法(我不会使用)是提供从stringPerfume:的隐式转换

public static implicit operator Perfume(string aroma)
{
    return new Perfume { Aroma = aroma };
}

然后这个工作:

Perfume perfume = new Perfume();
perfume = "aroma";

但它需要创建一个新对象,这是很少需要的,因为它删除了所有其他属性,也降低了代码的可读性(第一行毫无意义,因为它创建了一个一次性香水)。

顺便说一句,通常Aroma也是一个具有属性的类,而不是string。另一种方法是提供可用香气的enum。这增加了可读性,使代码更加健壮。

但也许你真的在寻找一种通过香气名称找到香水的方法。然后Dictionary<string, Perfume>(或Dictionary<Aroma, Perfume>,其中Aroma是枚举)更合适:

Dictionary<string, Perfume> allAromas = new Dictionary<string, Perfume>();
allAromas.Add("Musky", new Perfume{Aroma="Musky"});
allAromas.Add("Putrid", new Perfume{Aroma="Putrid"});
allAromas.Add("Pungent", new Perfume{Aroma="Pungent"});
allAromas.Add("Camphoraceous", new Perfume{Aroma="Camphoraceous"});
allAromas.Add("Pepperminty", new Perfume{Aroma="Pepperminty"});

现在,您可以稍后通过香气名称快速访问香水:

Perfume muskyPerfume = allAromas["Musky"];

有一种设置详细信息的标准方法。

Perfume perform = new Perfume(){ Aroma = "aroma" };

或者通过构造函数注入,如果您添加了一个新的构造函数,这是相当标准的。

Perfume perfume = new Perfume("Aroma");
public class Perfume
{
    public string Aroma { get; set; }
    public Perfume(string aroma)
    {
        Aroma = aroma;
    }
}