2017-02-03 3 views
-1

Я получаю ошибку Too many characters in character literal для нижеследующего кода? Как мне объявить buildserverlocation?Как избавиться от Слишком много символов в буквальном буквале?

using System; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     string buildServerLocation = @'\\Location\builds682\INTEGRATION\ABC1234.QSC.0.0-000000025-P-1'; 
     char delimiterChars = '\\'; 
     string[] serverString = buildServerLocation.Split(delimiterChars); 
     string serverName = serverString[1] + ".company.com"; 
     Console.WriteLine("build server name is " + serverName); 
    } 
} 
+9

Используйте '' ', а не' ''. – AlexD

+1

вам нужно перечитать разницу между символом 'char '' и' string '"' – MethodMan

+0

MethodMan - в чем разница между символом' 'и строкой' «?» можно указать ссылку? – user2125827

ответ

-4

Эта линия ваша проблема:

char delimiterChars = '\\'; 

Вы можете иметь только один символ в char буквальным. То, что вам нужно использовать в качестве разделителей, должно быть string, обозначаемое с помощью котировок.

string delimiterChars = "\\"; 

Примечание: Это будет работать с небольшим количеством других редактирования, так как string.Split() имеет перегрузку, которая принимает string. Вам просто нужно определить его второй параметр, который в этом случае может быть null.

+2

'' \\ ''- это экранированный символ обратной косой черты, и он отлично работает. – chadnt

+0

Тем не менее, я всегда держу в себе ясность кода. Для меня, используя двойные кавычки для назначения символа, его значение немного нечеткое при чтении кода. – CDove

0

В строковой литературе должны использоваться двойные кавычки.

string buildServerLocation = @"\\snowcone\builds682\INTEGRATION\IPQ8064.ILQ.5.0-000000025-P-1"; 

Признавая, что ваша строка начинается с двойными косыми чертами, вы, вероятно, хотите, третий элемент в массиве строк (индекс = 2).

string serverName = serverString[2] + ".qualcomm.com"; 

Эрик упомянул, используя класс, предназначенный для выполнения задачи. URI кажется хорошим вариантом в этом случае.

public static void Main(String[] args) 
{ 
    string buildServerLocation = @"\\location\builds682\INTEGRATION\IPQ8064.ILQ.5.0-000000025-P-1"; 
    var uri = new Uri(buildServerLocation); 
    string serverName = $"{uri.Host}.company.com"; 
    Console.WriteLine("build server name is {0}", serverName); 
    Console.ReadKey(); 
} 
3

Это должно быть строкой, но вы использовали ' синтаксис, который действителен только для одного символа:

string buildServerLocation = @'\\snowcone\builds682\INTEGRATION\IPQ8064.ILQ.5.0-000000025-P-1'; 

должен быть

string buildServerLocation = @"\\snowcone\builds682\INTEGRATION\IPQ8064.ILQ.5.0-000000025-P-1"; 

Эта декларация является правильным само по себе, но вы затем переходите к split. Это законно - благодаря Jeppe - но было бы лучше, чтобы понять, что это массив с одним полукокса:

char delimiterChars = '\\'; 

должен быть

char[] delimiterChars = { '\\' }; 

Но чем больше проблема заключается в том, что ни один Это верно. Если вы разделяете путь, используйте класс, предназначенный для извлечения данных из путей, а не для того, чтобы катить свой собственный.

Кроме того, не очень хорошая идея с точки зрения безопасности, чтобы размещать пути ваших внутренних серверов на общедоступном сайте.

+0

Перегрузка 'Split', для которой массив имеет модификатор' params', является перегрузкой, которая берет 'char []', поэтому я думаю, что исходный код был правильным в этом отношении. –

+0

@ JeppeStigNielsen: Хорошо, я забыл про эту перегрузку. –

+0

Эрик, можете ли вы расшифровать 'использование класса, предназначенного для извлечения данных из путей, а не для переноса ваших собственных? 'С примером? – user2125827

Смежные вопросы