Нет, вы не можете, потому что именованные кортежи в основном просто синтетический сахар.
Если вы рассмотрите этот код:
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 использует имена, он фактически преобразуется в .Item1
и .Item2
при компиляции.Поэтому вам следует просто использовать конструктор ValueType.