我有一个关于异常处理的问题.请考虑遵循Java代码段.
try{
//code
}catch(SubSubException subsubex){
//code
}catch(SubException subex){
//code
}catch(Exception ex){
//code
}
Run Code Online (Sandbox Code Playgroud)
我知道这是处理异常的推荐方法.但是我可以通过使用以下代码片段来实现相同的功能.
try{
//code
}catch ( Exception ex){
if( ex instanceof SubException){
//code
}else if(ex instanceof SubSubException){
//code
}else{
//code
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我第二种方法的缺点吗?
如果这对你来说是一个微不足道的问题,我很抱歉.
有没有办法在Visual Studio 2010中更改行结束字符(EOL)字符?我想将其从Windows('\n \n \n')格式更改为UNIX('\n')格式.
谢谢
使用该COUNT函数编写SQL语句时,我有两个选择.
SELECT COUNT(*) FROM <table_name>SELECT COUNT(some_column_name) FROM <table_name>在性能方面,什么是最好的SQL语句?使用选项1可以获得一些性能提升吗?
我正在使用System.Reflection.Emit名称空间编写一些IL机构来创建int和double使用数组.
为了创建int数组我正在使用以下代码.
LocalBuilder arr = gen.DeclareLocal(typeof(int));
gen.Emit(OpCodes.Ldc_I4_1);
gen.Emit(OpCodes.Newarr, typeof(int));
gen.Emit(OpCodes.Stloc, arr);
gen.Emit(OpCodes.Ldloc, arr);
gen.Emit(OpCodes.Ldc_I4_0);
gen.Emit(OpCodes.Ldc_I4, 500);
gen.Emit(OpCodes.Stelem_I4);
gen.Emit(OpCodes.Ldloc, arr);
gen.Emit(OpCodes.Ldc_I4_0);
gen.Emit(OpCodes.Ldelem_I4);
gen.Emit(OpCodes.Call,typeof(Console).GetMethod("WriteLine",new Type[]{typeof(int)}));
Run Code Online (Sandbox Code Playgroud)
它按预期工作,并在控制台上打印500.
我尝试创建double数组的方式如下所示.
LocalBuilder arr = gen.DeclareLocal(typeof(double));
gen.Emit(OpCodes.Ldc_I4_1);
gen.Emit(OpCodes.Newarr, typeof(double));
gen.Emit(OpCodes.Stloc, arr);
gen.Emit(OpCodes.Ldloc, arr);
gen.Emit(OpCodes.Ldc_I4_0);
gen.Emit(OpCodes.Ldc_R8, 500D);
gen.Emit(OpCodes.Stelem_R8);
gen.Emit(OpCodes.Ldloc, arr);
gen.Emit(OpCodes.Ldc_I4_0);
gen.Emit(OpCodes.Ldelem_I8);
gen.Emit(OpCodes.Call,typeof(Console).GetMethod("WriteLine",new Type[]{typeof(double)}));
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用,当我使用pereview它检查生成的程序集时,给了我以下错误.
Microsoft (R) .NET Framework PE Verifier. Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
[IL]: Error: [C:\temp\Research\Research\bin\Debug\MyMod.exe : Foo::Main][offset 0x00000006][found ref array …Run Code Online (Sandbox Code Playgroud) 我尝试使用以下策略为递归方法生成IL,首先我使用以下代码片段定义类型
private void InitializeAssembly(string outputFileName)
{
AppDomain appDomain = AppDomain.CurrentDomain;
AssemblyName assemblyName = new AssemblyName(outputFileName);
assemblyBuilder = appDomain.DefineDynamicAssembly(assemblyName,
AssemblyBuilderAccess.Save);
moduleBuilder = assemblyBuilder.DefineDynamicModule(outputFileName, outputFileName + ".exe");
typeBuilder = moduleBuilder.DefineType(typeName, TypeAttributes.Public);
methodBuilder = typeBuilder.DefineMethod("Main",
MethodAttributes.Static | MethodAttributes.Public,
typeof(void),
System.Type.EmptyTypes);
ilGen = methodBuilder.GetILGenerator();
}
Run Code Online (Sandbox Code Playgroud)
接下来,我开始为递归方法生成IL,如下所示.
MethodBuilder method = typeBuilder.DefineMethod(
“MethodName”,
MethodAttributes.Static | MethodAttributes.Public,
NodeTypeToDotNetType(func.RetType),
parameters);
ILGenerator ilOfMethod = method.GetILGenerator();
method.DefineParameter();
Run Code Online (Sandbox Code Playgroud)
为了在方法体内调用方法本身,我使用了以下构造,
ilOfMethod.Emit(OpCodes.Call, typeBuilder.GetMethod("MethodName", new System.Type[] {typeof(arg1),typeof(arg2),etc}));
Run Code Online (Sandbox Code Playgroud)
最后使用以下方法保存生成的组件.
private void SaveAssembly(string outputFileName)
{
ilGen.Emit(OpCodes.Ret);
typeBuilder.CreateType();
moduleBuilder.CreateGlobalFunctions();
assemblyBuilder.SetEntryPoint(methodBuilder);
assemblyBuilder.Save(outputFileName + ".exe");
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,由于递归方法调用构造,在方法内部返回null,因此无效.这里的问题是方法内的递归调用(即ilOfMethod.Emit(OpCodes.Call, typeBuilder.GetMethod("MethodName", …
我正在研究AI相关的应用程序.对于这个应用程序,我需要一个规则引擎.Jess是一个完全用Java编写的好的规则引擎.但是对于我的应用程序,由于许可限制,我无法使用它.
有人能告诉我一个用Java编写的开源规则引擎吗?
对于应用程序,我要检查特定用户是否已作为服务登录?如何以编程方式执行此操作?我在互联网上查了一下,找不到一些好的资源
谢谢
Upul
我对序列图有疑问.
绘制序列图时,
每个用户案例是否足以绘制一个图表?
或者我们是否需要绘制一组序列图来涵盖每个用户案例实例?(是系统执行的一系列操作,它们为特定的用例Actor生成可观察的值结果)
我正在用C#编写一个小编译器,并计划使用.Net平台生成IL指令System.Reflection.Emit.我的问题是,建议System.Reflection.Emit用于为生产编译器生成IL.
如果不建议System.Reflection.Emit用于为生产编译器生成IL,我们是否有用于此目的的替代库/工具?
我想为多线程应用程序生成IL.作为第一步,我编写了一个简单的应用程序并进行了检查,使用ILSpy生成了IL.
public class ThreadTesting
{
public static void Main()
{
Thread thread = new Thread(() => Print("Hello from t!"));
thread.Start();
}
public static void Print(string message)
{
Console.WriteLine(message);
}
}
Run Code Online (Sandbox Code Playgroud)
.method public hidebysig static
void Main () cil managed
{
// Method begins at RVA 0x2060
// Code size 46 (0x2e)
.maxstack 3
.entrypoint
.locals init (
[0] class [mscorlib]System.Threading.Thread
)
IL_0000: nop
IL_0001: ldsfld class [mscorlib]System.Threading.ThreadStart ThreadTesting::'CS$<>9__CachedAnonymousMethodDelegate1'
IL_0006: brtrue.s IL_001b
IL_0008: ldnull
IL_0009: ldftn void ThreadTesting::'<Main>b__0'()
IL_000f: newobj instance …Run Code Online (Sandbox Code Playgroud) c# ×4
il ×4
.net ×2
java ×2
aggregate ×1
clr ×1
performance ×1
rule-engine ×1
sql ×1
sql-server ×1
uml ×1