簡體   English   中英

有沒有類似於語法的編寫代碼的方法:class.method("variable").returnedVariable

[英]Is there a way of writing code similar to the syntax: class.method("variable").returnedVariable

我正在努力提高我對 C# 的理解。 有沒有辦法以以下格式編寫C#代碼:

string name = Person("Dave").name;
int age = Person("Dave").age;

我知道這可以在 Javscript 中完成,我知道這可以在 C# 中使用類似於以下內容的字典完成:

int age = Person["Dave"].age;

或者

int age = Person.age("Dave");

我的理解是字典選項只會返回一個值,而無法運行獲取值“年齡”的方法

我已經看到了一些與前兩個示例類似的代碼示例,但不明白這是如何編寫的,或者是否可能。

如果你想要這樣的語法Person("Dave").name - 你可以實現一個helper

  namespace MyClasses {
    ...

    public static class PersonHelper {
      ...

      public static Person Person(string name) {
        //TODO: having name you should return Person instance, 
        // e.g. with a help of some dictionary:

        return Person.AllPersons.TryGetValue(name, out var result) 
          ? result
          : null;
     }
   }

讓我們在Person實現這個AllPersons字典:

   public class Person {
     // Simplest, but not thread safe
     private static Dictionary<string, Person> s_AllPersons = new
       Dictionary<string, Person>();

     public Person(string name) {
       // When Person created we put the instance into the dictionary
       s_AllPersons.Add(name, this);

       Name = name;
     }

     public string Name {get;} 

     public static IReadOnlyDictionary<string, Person> AllPersons => s_AllPersons;

     ...
   }

然后添加using static來擺脫討厭的PersonHelper名稱:

    using static MyClasses.PersonHelper;

我們已經完成了:

    string name = Person("Dave").Name;

這里Person("Dave")將被視為MyClasses.PersonHelper.Person("Dave") ,它為我們返回我們讀取Name屬性(或字段)的Person class實例

您可以嘗試通過屬性和靜態字典來做到這一點:

class Person {
  static public Dictionary<string, Person> Persons  {get; set;};

  public string Name {get; set; }

  public Person() 
  {
    if ( null == Persons ) Persons = new Dictionary<string, Person>();
  }
}

// Not tested, but shoud work
Person.Persons("dave")?.Name

但它與在 Javascript 或 Python 中不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM