![](/img/trans.png)
[英]Error indexing method 'Class.Method' Cannot bind parameter 'log' to type TraceWriter
[英]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.