小编Upu*_*ara的帖子

异常处理问题

我有一个关于异常处理的问题.请考虑遵循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)

有人可以告诉我第二种方法的缺点吗?

java exception-handling

32
推荐指数
3
解决办法
2万
查看次数

在Visual Studio中更改EOL字符

如果这对你来说是一个微不足道的问题,我很抱歉.

有没有办法在Visual Studio 2010中更改行结束字符(EOL)字符?我想将其从Windows('\n \n \n')格式更改为UNIX('\n')格式.

谢谢

visual-studio-2010

19
推荐指数
1
解决办法
9137
查看次数

COUNT SQL函数的性能

使用该COUNT函数编写SQL语句时,我有两个选择.

  1. SELECT COUNT(*) FROM <table_name>
  2. SELECT COUNT(some_column_name) FROM <table_name>

在性能方面,什么是最好的SQL语句?使用选项1可以获得一些性能提升吗?

sql sql-server performance aggregate sql-server-2005

13
推荐指数
1
解决办法
1万
查看次数

为双数组生成IL

我正在使用System.Reflection.Emit名称空间编写一些IL机构来创建intdouble使用数组.

为了创建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)

c# il

7
推荐指数
1
解决办法
1962
查看次数

为递归方法生成IL

我尝试使用以下策略为递归方法生成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", …

.net c# il

7
推荐指数
1
解决办法
622
查看次数

用Java编写的开源规则引擎

我正在研究AI相关的应用程序.对于这个应用程序,我需要一个规则引擎.Jess是一个完全用Java编写的好的规则引擎.但是对于我的应用程序,由于许可限制,我无法使用它.

有人能告诉我一个用Java编写的开源规则引擎吗?

java rule-engine

6
推荐指数
1
解决办法
6568
查看次数

如何检查特定用户是否以编程方式登录为服务权限

对于应用程序,我要检查特定用户是否已作为服务登录?如何以编程方式执行此操作?我在互联网上查了一下,找不到一些好的资源

谢谢

Upul

c# access-rights

6
推荐指数
2
解决办法
3885
查看次数

UML序列图

我对序列图有疑问.

绘制序列图时,

每个用户案例是否足以绘制一个图表?

或者我们是否需要绘制一组序列图来涵盖每个用户案例实例?(是系统执行的一系列操作,它们为特定的用例Actor生成可观察的值结果)

uml

5
推荐指数
1
解决办法
3011
查看次数

为.Net平台生成IL

我正在用C#编写一个小编译器,并计划使用.Net平台生成IL指令System.Reflection.Emit.我的问题是,建议System.Reflection.Emit用于为生产编译器生成IL.

如果不建议System.Reflection.Emit用于为生产编译器生成IL,我们是否有用于此目的的替代库/工具?

c# compiler-construction il

5
推荐指数
1
解决办法
2167
查看次数

为匿名方法生成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)

.net clr il

5
推荐指数
1
解决办法
688
查看次数