簡體   English   中英

可能使用反射創建命名元組類型?

[英]Possible create named tuple type using reflection?

我可以使用Tuple.Createtypeof(Tuple<,>).MakeGenericType等創建普通的元組類型,但是如何創建命名的元組呢? 使用除Item1Item2等以外的其他屬性名稱,在運行時使用反射。

不,您不能,因為命名元組在很大程度上只是語法糖。

如果您考慮以下代碼:

private void button1_Click(object sender, EventArgs e)
{
    var abc = Get();
    MessageBox.Show(string.Format("{0}: {1}", abc.name, abc.age));  
}

private (string name, int age) Get()
{
    return ("John", 30);
}

然后查看反編譯的代碼(我使用了JetBrains的dotPeek):

private void button1_Click(object sender, EventArgs e)
{
  ValueTuple<string, int> valueTuple = this.Get();
  int num = (int) MessageBox.Show(string.Format("{0}: {1}", (object) valueTuple.Item1, (object) (int) valueTuple.Item2));
}

[return: TupleElementNames(new string[] {"name", "age"})]
private ValueTuple<string, int> Get()
{
  return new ValueTuple<string, int>("John", 30);
}

您可以看到,即使MessageBox代碼使用了名稱,編譯時實際上.Item2將其轉換為.Item1.Item2 因此,您應該只使用ValueType構造函數。

暫無
暫無

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

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