Estou tentando descobrir a melhor maneira de compartilhar um tipo entre arquivos.
Basicamente é isso que eu quero:
// TranspositionTable.cs
using TranspositionTableEntry = (ulong fullHash, int searchDepth, int refutationTo, int refutationFrom, double eval, NodeType type);
// Ai.cs
using TranspositionTableEntry = TranspositionTable.TranspositionTableEntry
Mas no Ai.cs recebo um erro porque TranspositionTableEntry não existe.
Posso pensar em duas soluções. Primeiro, posso alterar Ai.cs para usar a mesma definição que em TranspositionTable.cs e, então, apenas atualizá-lo se eu alterar a definição dessa tupla.
Caso contrário, posso simplesmente criar minha própria classe em vez de usar ValueTuple. Eu entendo como importar se eu quiser usar uma classe, mas eu só quero usar um ValueTuple, pois quero evitar alocar novo espaço no heap toda vez que eu fizer isso por motivos de desempenho, já que eu vou construir muitas dessas entradas.
Você pode usar um global using .
Coloque isso no início de um arquivo e você poderá usar o nome
TranspositionTableEntry
em todos os outros arquivos do seu projeto.Dito isso, ainda recomendo que você crie seu próprio tipo. Como você está preocupado com alocações de heap, você pode escrever uma struct (record) em vez de uma classe.
Isso permitirá que você obtenha a tupla de valor do registro, bem como defina a tupla de valor para um registro.
Você está bem perto! mas algo está faltando. Em C#, você não pode criar um alias diretamente
ValueTuple
como esse em todos os arquivos usando apenas umausing
instrução, a menos que o alias seja definido em um escopo comum e compartilhado (como uma classe ou namespace que ambos os arquivos podem ver).Para compartilhar um
ValueTuple
tipo entre arquivos , você pode definir o alias dentro de uma classe estática e reutilizá-lo por meio de umausing
diretiva em outros arquivos.Para resolver isso, siga a abordagem abaixo:
TranspositionTableTypes.cs
, definaAi.cs
(ou qualquer outro arquivo):Acredito que isso deve resolver você