What's the right way to expose

void MyClass::myMethod(int argc, char*[] argv)

to C# so that I can do 

MyClass obj = new MyClass();
String[] args = Environment.GetCommandLineArgs();
obj.MyFunc(args);
// OR
obj.MyFunc(args.Length, args);

I tried to use 

typedef vector<string> StringArray;
%template(StringArray) vector<string>;
%extend MyClass {
void MyFunc(vector<string> args) {
   // create char** array from args
   ...
   // then
   $self->myfunc(argc, argv);
}
}

but then on the C# side I have to do some additional conversion: 

StringArray argsSA;
foreach (obj in args) { argsSA.append(obj); }
MyFunc(argsSA);

It's annoying to have to require from user to do the conversion, plus there are in fact two conversions involved (the StringArray -> vector<string>, then that to char**). I saw carrays.i but that doesn't seem to address this situation, and I think typemap(csharp) will allow me to create a wrapper, but I was wondering if there is an easier way to do this. 

Oliver