2014-07-25 8 views
5

Mam dużą klasę C#, która zawiera tylko pola public const string. Jednak w jednym przypadku Próbuję złączyć ciąg i wartość enum w polu const string, tak:Łączenie ciągów stałych i wyliczeń

public const string GET_VALUES = "SELECT * FROM [tbl] WHERE [id] = " + Enum.Val; 

Jednak uzyskać ten błąd kompilatora:

'Namespace.SqlStatements.GET_VALUES' must be constant 

wiem mogłem upuść klauzulę const, ale chciałbym, aby wszystkie pola w tej klasie były spójne. Czy jest możliwe łączenie ciąg ciąg i wyliczenie w C#?

+4

Możesz użyć 'public readonly' ... Nie możesz użyć' const', ponieważ ciąg const musi być znany podczas kompilacji. Łączenie ciągów z wartością wyliczenia wymaga transformacji łańcuchowej tej wartości wyliczeniowej - coś, co dzieje się podczas wykonywania, a nie podczas kompilacji programu. – elgonzo

+0

@elgonzo Dobry pomysł, ale to nie pasuje do konsystencji, o której wspomniałem, którą starałem się zachować. Jeśli nie ma żadnej innej metody, to "do odczytu" będzie drogą do zrobienia. –

+1

Rozszerzyłem swój pierwszy komentarz. Zobacz, dlaczego nie możesz użyć 'const' w tym przypadku ... – elgonzo

Odpowiedz

5

Od MSDN:

A constant expression is an expression that can be fully evaluated at compile time. Therefore, the only possible values for constants of reference types are string and a null reference.

W twoim przypadku wyliczenia będą musiały zostać przekształcone na łańcuch przy użyciu ToString, co nie jest możliwe w czasie kompilacji. Sugeruję, abyś zmienił go na readonly, tak jak wspomniał o tym elgonzo.

+0

Jednak nie nazywam 'ToString()' w enum, szukam jego wartości całkowitej. Więc wartości enum nie można rozwiązać w czasie kompilacji? –

+0

No nie, to jest domyślnie wykonane przez kompilator. – Chris

+0

OK! Brzmi dobrze jak dla mnie. Dziękuję Ci! –

Powiązane problemy