获取,使用类名设置值

时间:2014-10-14 07:16:20

标签: c#

我希望我不会为这个问题获得大量的downvotes,但我想知道是否有办法使用实际的类名而不调用属性来获取和设置值。例如,如果我有:

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

是否有办法:

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

2 个答案:

答案 0 :(得分:5)

一种方式(我不会使用)是提供从stringPerfume的{​​{3}}:

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

然后这个有效:

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

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

顺便说一下,通常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"];

答案 1 :(得分:0)

有设定细节的标准方法。

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;
    }
}