2012-02-01 4 views
2

Предположим, у меня есть массив строки коробочный к объекту:Как удалить массив строк?

string[] files = Directory.GetFiles(path); 
object obj = files; 

Как я могу снова Unboxed в files в массив строки?

+6

Берегитесь вашей формулировкой: строки не «окно». То, что вы сделали, неявно преобразует массив строк в объект, но никакой бокс не задействован и не распаковывается. Чтобы уточнить, бокс и распаковка - это термины, используемые при преобразовании типов значений в ссылочные типы и из них. System.String не является типом значения. –

+0

Продолжение: массив строк также не является типом значений и не является массивом * anything * типа значения. Термины, которые вы хотите использовать, - это * cast * и * convert *. –

+0

спасибо Энтони. – yonan2236

ответ

4

Туз оператор похож на гипсе, за исключением того, что дает нулевой при сбое преобразования вместо повышения исключения. As operator

string[] someVarArray = obj as string[] 
if(someVarArray!=null) 
{ 
//do something 
} 
2

вы могли бы использовать в качестве оператора ..

if (obj is string[]) 
    string[] files = obj as string[]; 

вы могли бы просто «бросить» его обратно ....

if (obj is string[]) 
    string[] files = (string[])obj; 
4

Что вам нужно, это литая, не бокс и распаковка.

string[] files2 = (string[])obj; 

Но знайте, это сделать, если вы уверены, что ваш объект содержит массив строк (строка []), или в противном случае вы получите InvalidCastException. Если вы не уверены, у вас есть два способа проверки объекта:

string[] files2; 
if(o is string[]) 
{ 
    files2 = (string[])o; 
    // do whatever with files2 
} 

или

string[] files2 = o as string[]; 
if(files2 != null) 
{ 
    // do whatever with files2 
} 
+0

+1 для покрытия нескольких вариантов – phoog