我有一个object值可能是像int[]或的几种数组类型之一string[],我想将它转换为string[].我的第一次尝试失败了
void Do(object value)
{
if (value.GetType().IsArray)
{
object[] array = (object[])value;
string[] strings = Array.ConvertAll(array, item => item.ToString());
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
运行时错误Unable to cast object of type 'System.Int32[]' to type 'System.Object[]',回想起来很有意义,因为我int[]不包含盒装整数.
我四处寻找这个工作版本:
void Do(object value)
{
if (value.GetType().IsArray)
{
object[] array = ((Array)value).Cast<object>().ToArray();
string[] strings = Array.ConvertAll(array, item => item.ToString());
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
我想这没关系,但看起来很复杂.谁有更简单的方法?
从非托管C++回调C#很棘手.我从这篇MSDN文章 和这个stackoverflow技巧中了解了大部分所需的 内容, 结果在调试器中运行良好.但是在调试器之外它失败了"对象引用没有设置为对象的实例".
这是(简化的)C#代码:
class CSharpCode
{
delegate void CallbackDelegate();
void DoCSharp()
{
CallbackDelegate callbackDelegate = TheCallback;
IntPtr callbackDelegatePointer = Marshal.GetFunctionPointerForDelegate(callbackDelegate);
GCHandle gchCallbackDelegate = GCHandle.Alloc(callbackDelegatePointer);
GC.Collect(); // create max space for unmanaged allocations
CppCliCode.DoCppCli(callbackDelegatePointer);
}
public static void TheCallback()
{
MessageBox.Show("It worked");
}
}
Run Code Online (Sandbox Code Playgroud)
这是C++代码:
#pragma managed
public ref class CppCliCode
{
static void DoCppCli(IntPtr^ callbackDelegatePointer)
{
callback theCallback = static_cast<callback>(callbackDelegatePointer->ToPointer());
DoCpp(theCallback);
}
}
#pragma unmanaged
typedef void (__stdcall *callback)();
void DoCpp(callback theCallback)
{
theCallback(); …Run Code Online (Sandbox Code Playgroud) 我想修改现有的IntelliJ IDEA插件,作为构建我自己的插件的一步.我选择了Front End Alignment,在IntelliJ IDEA中打开它,添加了IntelliJ Community Edition SDK,并成功构建了项目.但是当我尝试添加插件运行/调试配置(以验证我可以调试插件)时,"使用模块的类路径"下拉列表仅包含"[无]",我得到:
Run Configuration Error: No plugin module specified for configuration
Run Code Online (Sandbox Code Playgroud)
项目结构>项目设置>模块显示这front-end-alignment是一个已知模块.
如何在调试器中运行此示例插件?